私は一種のランタイムシステム/インタプリタを作成している最中です。実行できる必要があることの1つは、外部ライブラリにあるc /c++関数を呼び出すことです。
Linuxでは、dlfcn.h
関数を使用してライブラリを開き、その中にある関数を呼び出しています。問題は、dlsysm()
返された関数ポインタを使用する場合、呼び出される前に適切な型にキャストして、関数の引数と戻り型がわかるようにする必要があることです。ただし、ライブラリ内の任意の関数を呼び出す場合は、明らかにしません。コンパイル時にこのプロトタイプを知っています。
だから私が求めているのは、動的にロードされた関数を呼び出して引数を渡し、プロトタイプであることがわからなくても戻り値を取得する方法はありますか?
これまでのところ、これを行う簡単な方法はないという結論に達しましたが、私が見つけたいくつかの回避策は次のとおりです。
ロードしたいすべての関数が同じプロトタイプを持っていることを確認し、これらの関数がパラメーターと戻り値を取得するためのソートメカニズムを提供します。これは私が現在行っていることです。
インラインasmを使用して、パラメーターをスタックにプッシュし、戻り値を読み取ります。可能であれば、これを避けたいと思います。
誰かが何かアイデアを持っているなら、それは大いにありがたいです。
編集:
私は今、私が探していたものを正確に見つけました:
「ポータブルForeignFunctionインターフェイスライブラリ」
(私は元の質問でより明確であったかもしれないことを認めますが!)