c# - 在 .NET Web 应用程序中使用 C 库

标签 c# .net interop pinvoke unmanaged

我有一个 C 库的源代码,我需要将其与我的 C# ASP.Net 应用程序一起使用。听起来处理这个问题的方法是创建一个 C++ dll 包装器并将其 DLLImport 到我的 C# 项目中。我发现这有点难看,因为当它抛出异常时整个应用程序都会崩溃。这是实现这一目标的最佳方法,还是有更安全的方法?我正在尝试对如何使用 C 库创建 COM 对象进行一些研究,但还没有真正找到太多东西。是否可以创建 COM 对象并将其引用为 .NET 托管代码?

最佳答案

我用谷歌搜索了解决这个问题的方法。我发现这很棒article比较

  1. 使用 PInvoke 和大量编码的 C# 外观
  2. C++/CLI 中互操作层的外观,并以混合模式进行编译以供 C# 使用。

另外,这个MSDN citation :建议使用 C++ Interop,而不是显式 PInvoke,因为它提供更好的类型安全性,通常实现起来不那么繁琐,如果修改非托管 API,则更宽容,并且可以实现显式 PInvoke 无法实现的性能增强。

你的想法(C++ COM 外观)似乎是合法的 preached by the good book有 2 个优点:

  1. 生成的类可以在 Visual C++ 以外的语言中使用。
  2. COM 接口(interface)的详细信息可以对托管客户端代码隐藏。 .NET 数据类型可以用来代替 native 类型,并且数据编码(marshal)的详细信息可以在自定义运行时可调用包装器内透明地执行。

关于c# - 在 .NET Web 应用程序中使用 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394228/

相关文章:

swift - 快速访问C变量

c# - 比较对象,忽略成员的 "order"

javascript - AngularJS 缓存 $http.post 响应

c# - MonoTouch - 从主包中读取文件

.net - 当 ShowinTaskBar 为 false 时,窗口消失

c# - 使用 .NET (C#) 修改路由表

c# - 无法从 VS 2010 SP1 中的 C# 访问 C++ 类/命名空间

c# - 如何为 C# 项目生成 .tlh 文件

c# - 将异步放在不执行等待操作的 WebAPI Controller 操作上有什么好处?

c# - .NET 正则表达式替换单行匹配未知字符