1

実行時に共有オブジェクトをロードし、共有オブジェクトの任意の関数を呼び出す C アプリケーションがあります。共有オブジェクトはユーザーによって作成され、彼の関数の署名を私に与えました。

 int func(int a, int b, double c)

dlopen を使用してオブジェクトをロードし、dlsym を使用して共有オブジェクト関数への関数ポインターを取得します。ここで、パラメーターを関数に渡す必要があります。コンパイル時に署名しません。それを行う最良の方法は何ですか?アプリケーションで関数を呼び出す前に署名を確認する機会はありますか?

4

1 に答える 1

2

C/C++ 関数ポインタのチュートリアル をご覧ください。それはあなたのすべての質問に答えるはずです。

実行時のチェックに関して: いいえ、C はリフレクションをサポートしていないため、署名の適合性をチェックすることはできません。dlsym() は通常、適切な関数ポインターを返しませんが、キャストする必要がある (void *) を返します。署名が事前にわからない任意の共有関数を使用することは、設計が悪いことを示しています。私のアドバイスは、アーキテクチャを再考することです。

于 2009-12-16T15:56:14.797 に答える