他のプロセスが(UNIXソケットを介して)関数を呼び出せるようにするこのプログラムがあります。メッセージ プロトコルは非常に単純で、関数名、関数シグネチャ、およびパラメーターを保持するバッファー (char *) です。
プログラム内のモジュールが関数にアクセスできるようにする場合、名前と署名をライブラリに登録します。私が直面している問題は、要求が入ったときに関数を物理的に呼び出すことです。RPC と Java RMI のようなライブラリを見てきましたが、呼び出しをラップするためにスタブを生成する必要があります。私が取り組んでいるシステムは非常に動的であり、変更できない他の人々のコードとやり取りする必要もあります。
基本的に、関数は次のようになります。
int somefunc(int someparam, double another)
{
return 1234;
}
今、私は図書館に登録しています:
// func ptr name signature
REG_FUNCTION(somefunc, "somefunc", "i:id");
リクエストが来ると、いくつかのエラー チェックを行い、有効になったら関数を呼び出します。だから私は変数を持っています:
void * funcptr = (the requested function);
char * sig = (the function signature);
char * params = (a buffer of function parameters);
//note that the params buffer can hold data types of arbitrary lengths
C でパラメーターを使用して関数を呼び出すにはどうすればよいですか?
ありがとう!