c# - 将 SWIG 与 C# 结合使用时的最佳实践是什么?

标签 c# c swig

有人用过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/

相关文章:

c - 如何重新分配一些使用 calloc 分配的内存?

循环和数组的 C 到 MIPS 转换

python - 如何使用 Swig 中止调用 C 函数的 Python 脚本?

c++ - SWIG Python 到 C++ : TypeError trying to set struct member of type map<string, int>

c# - 在给定限制的情况下寻找更有效的流行计数

c# - 如何从 MultiSelectList 返回 MvcHtmlString

c# - Entity Framework 批量插入抛出 KeyNotFoundException 错误

c# - 保存 Word 文档

python - 调用 PyEval_CallObject 时程序关闭

python - SWIG 包装 C 库引发异常的最优雅方式