将SWIG与C#结合使用时的最佳实践是什么?有没有人在C#中使用过SWIG库?如果有,您发现了哪些陷阱以及使用该库的最佳方式是什么?我正在考虑将它用作用C编写的程序的包装器,我想包装头文件以便我可以在我的.NET应用程序中使用它们。编辑:对目标操作系统的一些说明。我计划在Linux和Windows上运行该应用程序,因此我正在研究SWIG。P/Invoke不是一个选项。我认为早期张贴者犯的错误是阅读文档而不是查看示例。几个小时前,我需要将一些C++类与C#连接起来。我查看了我的Swig目录(我已经将它用于其他工作),找到了目录Examples/csharp/class,浏览了代码,加载了解决方案,grokked它,复制了它,放入我的代码,它工作了,我的工作已经完成了。话虽如此,生成的P/Invoke代码并不能满足所有需求。根据您的项目,自己编写一些简单的API包装器或编写托管C++(查找SlimDX中的优秀示例)可能同样容易。对于我的需要,这很简单-我有mystuff.dll,现在我还可以发送mystuffnet.dll。我同意文档很难进入。编辑:我注意到OP只提到了C。你并不真的需要Swig,只需使用通常的C#/CDLLImport互操作语法。当您想从C#调用C++类时,Swig会很有用。对于我的最后一个项目,这是整个C#SWIG配置文件:i这会生成一个Project.cxx,我将其编译并直接链接到“主”DLL,因此我不需要第二个C++“助手”DLL。SWIG还会生成一堆C#文件,我将它们编译成.NETDLL。我的其他包装器(Java、PHP等)确实使用帮助程序DLL。正如@patrick提到的,SWIG使用P/Invoke,因此如果遇到问题,您需要寻找其他解决方案。如果您使用与正常类型(voids、structs等)不同的类型,则必须做一些额外的工作才能使其正确,但对于使用int、char*等的正常API而言,它不会没关系。几年前,我曾尝试使用SWIG来包装项目C++,以便在.NET中使用。我没有走得太远,因为生成SWIG所需的配置非常痛苦。当时我只是想要一个解决方案,而不是学习另一种语言/api/等。这些天SWIG可能更容易使用,我不能告诉你。我们最终使用托管C++来包装C++项目。它工作得很好。如果你只是直接从dll中调用函数,我建议不要担心以上任何一个,只需使用P/Invoke如果所有分享的内容对你有用并且你需要了解更多关于C#的学习教程,我希望你会更加关注它。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
