私は自分のライブラリのプロトタイプツールとしてPure Dataを使いたいと思っています。 Pure DataのパッチはC言語で書かれていますが、私のライブラリはC++で書かれています。どうすれば純粋なデータでこのコードを使用できますか?私はプレーンCを使用していないので、私はC++クラスのCラッパーをどのように書くことができるのか、クラスをインスタンス化する方法を知りたいのですが?あるいは、Cですべてを書き直さなければならないのですか?Cラッパーfor 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);
ノートTHI sはC++コードでなければなりません。 extern "C"
は、関数がCの命名規則を使用するように指定しています。
'void *'を使用するのではなく、不完全な構造体を使用して型の安全性を得るべきです。 –
理解しやすくするために、 'extern" Linkage_Specification "{// code}"このようにして、コードをリンクする際に使用するリンケージ仕様をコンパイラに指示します。 –
あなたの例を完全に理解しているかどうかはわかりません。 C++ヘッダのextern "C"関数を宣言すると、なぜC言語で宣言しなければならないのですか?私はCファイルにC++ヘッダーを含めて関数を直接呼び出すことはできませんか? – Pedro
あなたはC++からCを絶対に呼び出すことができます - 問題ありません!
Pure Dataから呼び出す関数を「extern C」として明示的に宣言しなければならない場合があります。しかし、それは純粋なデータがすでにあなたはおそらく純粋なデータのヘッダファイルに「のextern C」が表示されます(あなたのためにそれを行っていることはほぼ確実だ
ここは、より多くの情報です:「希望
http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
こと助け
私はQからOPがC++をCから呼び出すと思っています。他の方法ラウンド。 –
私はそれを他の方法で使いたい:C++をcから呼び出す。 – Pedro
おそらくPure Dataは、それが何であれ、Cについてしか知りません。 –
私はそれを別の方法で入れてみましょう:CはC++ソースに呼び出すたび)あなたがC++ソースからC関数、データやライブラリを呼び出すことができ、あなたがC.
2からC++ソース呼び出す)
1ただし、そのソースはC++のCサブセットで記述する必要があります。
3)この部分は「extern C」を使用しています。
4)他の部分は、私は先に引用したリンクが詳細
6の多くを与える) "の#ifdef __cplusplus"
5を使用して)私はPure Data site見ました。あなたのライブラリにいくつかの "調整"をしなければならないかもしれません。新しいヘッダーを作成することもできます。しかし基本的には、あなたのライブラリを純粋なデータと統合するというあなたの目標をおそらく達成できると思います。
私見...
またflext frameworkを使用してC++を使用して純粋なデータのためのオブジェクトを作成することができます。
- 1. Qtラッパーfor Cライブラリ
- 2. Objective-C++ for iPhoneでC++のpopen()ラッパーが機能しない
- 3. C++のC++/CLIラッパー
- 4. C/C++のLAPACKラッパー
- 5. C++ネイティブDLLのC++/CLIラッパー
- 6. ブースト/ C++用のC++ラッパー11
- 7. 汎用ラッパーC++
- 8. authorize.net C#ラッパー/ライブラリ
- 9. Firefox C#ラッパー/コントロール
- 10. C++ラッパー - sqlite3pp
- 11. C#のLuaラッパー?
- 12. C#ソーシャルネットワーキングライブラリAPIラッパー
- 13. C#の.Netラッパー
- 14. syscallラッパーasm C
- 15. CのSWFラッパー#?
- 16. C++ Firebaseラッパー?
- 17. C#のコマンドラインツールのラッパー
- 18. C++ Pythonラッパーのメモリリーク
- 19. OpenNI C#ラッパー:WaitAnyUpdateAll timeout
- 20. C#XMLシリアル化ラッパー
- 21. libevはC++ラッパーfunction_thunk
- 22. C++のクロスプラットフォームSqlite3ラッパー
- 23. カスタムC#Dapper ORMラッパー
- 24. C#デリゲートをC++/CLIラッパーに渡す
- 25. scala.concurrent.Futureラッパーfor java.util.concurrent.Future
- 26. Objective-CのBonjour通信ラッパー?
- 27. CコールバックへのPythonラッパー
- 28. iOS Google DocsのObjective-Cラッパー
- 29. C静的ライブラリのラッパー
- 30. C#用のベストCouchDBラッパー?
少し遅れましたが、私はC++のCラッパーに関する小さなハウツーを書いています:http://www.teddy.ch/c++_library_in_c/ – Teddy