1

我有一个纯 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
}

以这种方式将 SWIG 与现有的纯 C API一起使用是否容易?

4

1 回答 1

1

即使 SWIG 不能自动为您创建引用计数,它也有很好的能力来调整结果代码。(我在 Python 中对 refs 做了类似的事情)。您可以自定义生成的 C#,也可以在 SWIG .i 文件中增强 C 方面的功能。

使用 .i 文件,您可以将方法添加到类,或者您可以将前缀或后缀代码添加到目标语言中的现有方法。几乎所有您可能需要的东西都能得到满足。例如,请参阅http://www.swig.org/Doc2.0/CSharp.html#CSharp_extending_proxy_class

doco 并不总是很容易遵循,但从长远来看它是值得的。特别是如果您有多种目标语言。

于 2013-09-23T05:59:12.293 回答