【问题标题】:Using a C library in .NET web application [closed]在 .NET Web 应用程序中使用 C 库 [关闭]
【发布时间】:2014-12-11 05:16:11
【问题描述】:
我有一个需要与我的 C# ASP.Net 应用程序一起使用的 C 库的源代码。听起来处理这个问题的方法是创建一个 C++ dll 包装器并将其 DLLImport 到我的 C# 项目中。我发现这有点丑陋,因为当它引发异常时整个应用程序崩溃。这是实现这一目标的最佳方法,还是有更安全的方法?我正在尝试对如何使用 C 库制作 COM 对象进行一些研究,但在那里并没有真正找到太多。是否可以创建一个 COM 对象并将其作为 .NET 托管代码引用?
【问题讨论】:
标签:
c#
.net
interop
pinvoke
unmanaged
【解决方案1】:
我用谷歌搜索了这个问题。我发现这个很棒的 article 比较
- 使用 PInvoke 和大量编组的 C# 外观
- C++/CLI 中互操作层的外观,并以混合模式编译以供 C# 使用。
另外,这个MSDN citation:C++ 互操作被推荐而不是显式 PInvoke,因为它提供了更好的类型安全性,实现起来通常不那么乏味,如果修改了非托管 API 更宽容,并且可以实现不可能的性能增强使用显式 PInvoke。
此外,您的想法(C++ COM 外观)似乎是合法的 preached by the good book,具有 2 个优点:
- 生成的类可用于 Visual C++ 以外的语言。
- COM 接口的详细信息可以对托管客户端代码隐藏。可以使用 .NET 数据类型代替本机类型,并且可以在自定义运行时可调用包装器内透明地执行数据封送处理的详细信息。