4

ユーザーに関数プロトタイプを提供し、ユーザーがそれを実装する必要があるシステムがあります。ここで、g++ を使用してこのファイルをコンパイルし、さらに処理するために dlopen と dlsym を使用して動的にロードします。今、私はここで読んだ:

c++ dlopen ミニハウツー

C++ 関数をロードするには、関数の前に extern "C" を使用する必要があります。さて、問題は、物事がどのように機能しているかをユーザーに見せたくないということです。関数の前にユーザー extern "C" を表示したくありません。

それを回避する方法はありますか?

4

3 に答える 3

1

C++ を使用しているのであれば、ある種の純粋な仮想クラスへのポインターを単に返す関数を 1 つ (または 2 つ) だけエクスポートしてみませんIMyModuleか? 1 つ (または 2 つ) のエクスポートされた関数は、 (および)extern "C"に似たものになります。extern "C" IMyModule * create_instance_IMyModule();extern "C" void delete_instance_IMyModule(IMyModule const *);

于 2013-08-07T08:48:29.287 に答える
0

各宣言の前に代わる別の方法extern "C"は、ブロック スタイルの構文を使用することです。

extern "C" {

void my_callback();
int other_functionality( foo * );

}

多くの場合、extern "C" {および閉じ中括弧}は、組み込みマクロを条件とするマクロでラップされている__cplusplusため、ヘッダーは純粋な C からも使用できます。これにより、好ましくないと思われる部分もカプセル化されます。

いずれにせよ、大したことはわかりません。extern "C"ユーザーが C++ で記述できる場合は、ライブラリのドキュメントで指示されたときに、C インターフェイス関数のプロトタイプを囲むことができるはずです。

于 2013-08-07T07:26:32.120 に答える