他のプロセスが(UNIXソケットを使って)関数を呼び出せるようにするこのプログラムがあります。メッセージプロトコルは非常に単純で、関数名、関数シグニチャー、およびパラメーターを保持するバッファー(char *)です。CスタブのないRPC
プログラム内のモジュールが関数にアクセスできるようにしたい場合、名前と署名をライブラリに登録します。私が直面している問題は、要求が入った後に物理的に関数を呼び出すことです.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でパラメータで関数を呼び出すことができますか?
ありがとうございます!
あなたは何のための署名が必要ですか?クライアントは関数を呼び出すか、somefuncを含むライブラリに要求を渡しますか?いくつかの明確化は助けになるでしょう! – dirkgently