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 に答える