用于C ++的C包装器

我想将Pure Data用作我自己库的原型工具。 我发现Pure Data补丁是用C语言编写的,但我的库是用C ++编写的。 那么如何在纯数据中使用此代码呢? 由于我没有使用普通的C,我想知道如何编写C ++类的C包装器以及如何实例化我的类呢? 或者我必须重写C中的所有内容?

您需要为每个需要调用的函数编写包装函数。 例如:

// The C++ implementation class SomeObj { void func(int); }; extern "C" { SomeObj* newSomeObj() {return new SomeObj();} void freeSomeObj(SomeObj* obj) {delete obj;} void SomeObj_func(SomeObj* obj, int param) {obj->func(param)} } // The C interface typedef struct SomeObjHandle SomeObj; SomeObj* newSomeObj(); void freeSomeObj(SomeObj* obj); void SomeObj_func(SomeObj* obj, int param); 

请注意,这必须是C ++代码。 extern "C"指定该函数使用C命名约定。

让我换一种说法:

1)您可以从C ++源调用C函数,数据和库,然后从C调用C ++源代码。

2)然而,每当C调用C ++源代码时,该源必须写在C ++的C子集中。

3)部分内容使用“extern C”。

4)另一部分是使用“#ifdef __cplusplus”

5)我上面引用的链接给出了很多细节

6)我查看了Pure Data站点 。 您可能需要对库进行一些“调整”。 您可能希望创建一个新标题。 但从根本上说,我认为你可以实现让你的库与Pure Data集成的目标。

恕我直言…

您还可以使用flext框架使用C ++为Pure Data编写对象。

你绝对可以用C ++调用C – 没问题!

最糟糕的情况是,您可能必须明确声明从Pure Data调用的那些函数为“extern C”。 但几乎可以肯定纯数据已经为你做了(你可能会在Pure Data头文件中看到“extern C”)。

这里有更多信息:

http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx

‘希望有所帮助!