有人用过SWIG吗?用 C# 库?如果有,您发现了哪些陷阱以及使用该库的最佳方式是什么?我正在考虑将它用作用 C 编写的程序的包装器,我想包装头文件,以便在我的 .NET 应用程序中使用它们。
编辑:对目标操作系统的一些说明。我计划在 Linux 和 Windows 上运行该应用程序,因此我正在研究 SWIG。 P/Invoke 不是一个选项。
最佳答案
对于我的上一个项目,这是完整的 C# SWIG 配置文件:
%module mdProject
%{
#include "mdProject.h"
%}
我用 SWIG 编译它:
swig -csharp -c++ -I../../Include mdProject.i
这生成了一个 Project.cxx,我将其编译并直接链接到“主”DLL 中,因此我不需要第二个 C++“帮助程序”DLL。 SWIG 还生成了一堆 C# 文件,我将其编译成 .NET DLL。我的其他包装器(Java、PHP 等)确实使用了帮助程序 DLL。
正如@patrick 提到的,SWIG 使用 P/Invoke,因此如果您对此有疑问,则需要寻找其他解决方案。
如果您使用与普通类型不同的类型(空值、结构等),您将需要做一些额外的工作才能使其正确,但对于使用 int、char* 等的普通 API 来说,这很好。
关于c# - 将 SWIG 与 C# 结合使用时的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268/