我有一个 C 库的源代码,我需要将其与我的 C# ASP.Net 应用程序一起使用。听起来处理这个问题的方法是创建一个 C++ dll 包装器并将其 DLLImport 到我的 C# 项目中。我发现这有点难看,因为当它抛出异常时整个应用程序都会崩溃。这是实现这一目标的最佳方法,还是有更安全的方法?我正在尝试对如何使用 C 库创建 COM 对象进行一些研究,但还没有真正找到太多东西。是否可以创建 COM 对象并将其引用为 .NET 托管代码?
最佳答案
我用谷歌搜索了解决这个问题的方法。我发现这很棒article比较
- 使用 PInvoke 和大量编码的 C# 外观
- C++/CLI 中互操作层的外观,并以混合模式进行编译以供 C# 使用。
另外,这个MSDN citation :建议使用 C++ Interop,而不是显式 PInvoke,因为它提供更好的类型安全性,通常实现起来不那么繁琐,如果修改非托管 API,则更宽容,并且可以实现显式 PInvoke 无法实现的性能增强。
你的想法(C++ COM 外观)似乎是合法的 preached by the good book有 2 个优点:
- 生成的类可以在 Visual C++ 以外的语言中使用。
- COM 接口(interface)的详细信息可以对托管客户端代码隐藏。 .NET 数据类型可以用来代替 native 类型,并且数据编码(marshal)的详细信息可以在自定义运行时可调用包装器内透明地执行。
关于c# - 在 .NET Web 应用程序中使用 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394228/