18

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

4

4 回答 4

30

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

// 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 命名约定。

于 2011-10-07T18:04:30.990 回答
2

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

于 2011-12-12T15:12:15.407 回答
1

让我换一种说法:

1) 你可以从 C++ 源代码调用 C 函数、数据和库,也可以从 C 调用 C++ 源代码。

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

3)其中一部分是使用“extern C”。

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

5)我上面引用的链接提供了很多细节

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

恕我直言...

于 2011-10-07T18:45:12.740 回答
0

您绝对可以从 C++ 调用 C - 没问题!

在最坏的情况下,您可能必须将那些从 Pure Data 调用的函数显式声明为“extern C”。但几乎可以肯定,Pure Data 已经为您完成了这项工作(您可能会在 Pure Data 头文件中看到“extern C”。

这里有更多信息:

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

'希望有帮助!

于 2011-10-07T17:58:56.513 回答