我有一个纯C库,它的头是从Perl中的自定义IDL生成的。我想转到SWIG(或另一个生成器)来删除对Perl的依赖。我也喜欢SWIG附带的免费一代Python和Ruby包装器。
我目前生成了一个C#包装器,它要求将父类的概念传递给构造函数:
// Pure C API
b = StructB_Create(a);
// not safe to free a until b is freed
// C# wrapper ctor
B(ClassA a)
{
this.parent = a; // ref to prevent gc of a
}
用现有的纯C API使用SWIG很容易吗?
最佳答案
即使SWIG不能自动为您创建引用计数,它也有很好的调整结果代码的能力。(我对Python中的refs做了类似的操作)。您可以自定义生成的C#,也可以从SWIG.i文件中增强所有内容的C面。
使用I文件可以向类中添加方法,也可以向目标语言中的现有方法添加前缀或后缀代码。你可能需要的任何东西都能满足。例如,请参见http://www.swig.org/Doc2.0/CSharp.html#CSharp_extending_proxy_class
doco并不总是容易理解的,但从长远来看,它是值得的。尤其是当你有多种目标语言的时候。
关于c# - 来自现有C API的SWIG C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18948541/