不透明な型を定義するサードパーティの C ライブラリを使用しています。
foo_t
そして、その関数でこの型へのポインターを使用します。
void foo_init(foo_t *foo);
典型的な使用法は、スタックに foo_t を割り当て、参照を渡すことです。
{
foo_t foo;
foo_init(&foo);
...
}
foo_init()
を構成するものを知らずに ctypesを呼び出すにはどうすればよいfoo_t
ですか?
そのサイズのバッファを作成してキャストできることを知っていればと思いますsizeof(foo_t)
が、ctypesでサイズを取得することは可能ですか?
ワンライナーの C プログラムを書くことができます。
printf("sizeof(foo_t) = %zu\n", sizeof(foo_t));
その値を私のpythonにハードコードしますが、それは急いで醜くなります.ライブラリをアップグレードするたびに、自分のpythonソースに手を加える必要があります.
サイズ値をエクスポートするために python c-ext を作成するのが少しクリーンな方法ですが、これもライブラリのアップグレードごとに再コンパイルする必要があります。
このような不透明な型で ctypes を使用するためのレシピはありますか?