SWIG 可以帮助创建由两部分组成的包装器,一部分是 C++ 端,另一部分是 C# 端。 但是需要花费一些时间来设置正确的生成文件。 另一种比较需要手动编码的选择是 C++/CLI。 对于纯 c api,我更喜欢使用 p/invoke 而不是它们中的任何一个。有一个程序可以自动转换 c 头文件。如果我记得正确的话,它被称为 "P/Invoke Interop Assistant" 或者 "Interop Signature Toolkit"。 还有一个名为 mono/cxxi 的工具看起来很酷。
在.Net中使用本机.dll的过程称为P/Invoke。请参考http://pinvoke.net/了解一些示例。请注意,您必须将构建目标与.dll版本匹配。因此,对于x86 .dll,您需要将项目锁定在x86上,对于x64也是如此。请注意,您只需要锁定执行项目(.EXE),而不是从.EXE加载的任何其他项目。如果将它们设置为ANY,则.Net会自动将.Net .dll与CPU目标类型匹配。来自http://social.msdn.microsoft.com/forums/en-US/clr/thread/c957959e-0f0c-422e-a5be-4ccfdd12e63d的附加注释:您可以使用“dumpbin /exports ”或依赖项查看器(depends.exe)查看导出的符号。它们都包含在Visual Studio中。关于C++的额外评论:虽然使用从.Net调用C编写的本机.dll相对简单,但使用利用对象的C++二进制文件并不那么容易。解决这个问题的一种方法是使用C++ CLI项目,它是托管.Net代码和非托管C++库之间的绑定。