我想在c#项目中使用c ++库。是否有任何包装工具可以自动导入所有类?
答案 0 :(得分:9)
SWIG可以帮助创建一个由两部分组成的包装器,一个是C ++侧面,另一个是C#侧面。
虽然设置正确的生成文件需要一些工作。
需要更多手动编码的替代方案是C ++ / CLI。
对于纯c apis,我更喜欢p / invoke而不是其中任何一个。有一个程序可以自动转换c头。如果我没记错的话,它被称为“P / Invoke Interop Assistant”或“Interop Signature Toolkit”。
还有mono/cxxi看起来很酷。
答案 1 :(得分:2)
在.Net中使用原生.dll的过程称为P / Invoke。请查看http://pinvoke.net/以获取一些示例。
请注意,您必须将构建目标与.dll的版本匹配。因此,对于x86 .dll,您需要将项目锁定到x86,与x64相同。
注意2,您只需要锁定正在执行的项目(.EXE),而不是从.EXE加载的任何其他项目。如果设置为ANY,.Net将自动将.Net .dll与CPU目标类型匹配。
来自http://social.msdn.microsoft.com/forums/en-US/clr/thread/c957959e-0f0c-422e-a5be-4ccfdd12e63d:您可以使用“dumpbin / exports”或依赖性walker(depends.exe)来查看导出的符号。它们都包含在Visual Studio中。
答案 2 :(得分:0)
如果这是非托管代码,那么您可以使用P/Invoke。另一种可能性是使用C ++ / CLI扩展将代码编译成可以直接使用的托管程序集。