SWIG C#来自现有的C API

SWIG C#来自现有的C API,c#,c,swig,C#,C,Swig,我有一个纯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; //

我有一个纯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一起使用容易吗?

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

使用.i文件,可以向类添加方法,也可以向目标语言中的现有方法添加前缀或后缀代码。你可能需要的几乎任何东西都会得到满足。例如,请参见


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

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

使用.i文件,可以向类添加方法,也可以向目标语言中的现有方法添加前缀或后缀代码。你可能需要的几乎任何东西都会得到满足。例如,请参见

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