2011-02-12 15 views
10

リモートサーバでいくつかの操作を行うためにクライアントで使用できるライブラリをC++で記述する必要があります。特定の私の唯一の事はまだそれを行っていない:C + +ライブラリは、Cのインターフェイスが必要です。私はより良く説明しましょう: クライアントからこのlibを使用して、私は何かを呼び出す必要があります: int操作(void * addr); if < 0エラー そうです。 しかし、ライブラリはC++のクラスです。 私の答えは..私はライブラリ内のクラスのインスタンスを保持するグローバル変数が必要ですか? C++クラスのこのCインターフェイスを開発するためのいくつかの良いオプションがありますか?C++インタフェースを持つC++ライブラリ

回答のためのアドバイスです。

+4

キーの回答は、すでにダウンしています。あなたのインターフェイス宣言を 'extern" C "{}'に忘れないでください。 –

+2

http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html – Flexo

+1

実際の例として、0MQライブラリhttp://www.zeromq.orgをご覧ください: C言語で書かれたC + +のインターフェイス(およびその周りにラップされたC + +のインターフェイス)。 –

答えて

16

PIMPL idiomはCラッパーで使用できます。メソッドYourClass_Createを提供し(内部でnewを使用して)コンストラクタを呼び出し、クラスインスタンスへのポインタを返します。クライアントコードの場合、これはちょうど不透明なハンドル(void *の場合はtypedefであるかもしれません)を、Cインタフェースのすべての関数に渡して、動作させる必要があるインスタンスを指定します(FILE *stdioのように)。

これらの関数はすべて、ハンドル上の対応するメソッド(クラスへのポインタに変換されたもの)を呼び出し、例外をエラーコードに変換する必要があります。


JDV-ヤン・デ・ヴァンが彼のコメントで指摘@として、そうしないと、リンカエラーを取得することが、あなたのCラッパーコードの周りに必要な#ifdefextern "C" {}を忘れないでください。

関連する問題