libffi のマンページには、基本的に関数へのポインターが必要な例が示されています (例の場合はputs
)。
ただし、関数の名前しか知らないが、実際にはポインターを持っていない場合はどうすればよいでしょうか (通常、動的プログラミング言語で ffi が使用されている場合に発生します)。
たとえば、次のようなことをしたい (疑似コード):
cif = null
s = "Hello World"
args = []
values = []
args[0] = ffi.type_pointer
values[0] = address_of(s)
if(ffi.prepare(cif, ffi.DEFAULT_ABI, ffi.type_uint, args)):
ffi.call(cif, "puts", values)
要するに、dlfcn/LoadLibrary と同様に、libffi に関数を動的に検索させ (最初に ffi でサポートされている場合)、提供された FFI CIF タイプで呼び出します。
libffiでそのようなことは可能ですか?簡単な例はどのようになりますか?