Linuxシステム上のPythonからC共有ライブラリを呼び出しています。
私が遭遇している問題は、Cライブラリ内の関数が引数として構造体へのポインタを受け取ることです。次に、構造体の配列のメモリをmallocし、配列にデータを入力して戻ります。だから私は関数を次のように定義しました
from ctypes import *
class myStruct(Structure):
_fields_ = [("id", c_uint), "name", c_char*256)]
library.func.argtypes = [POINTER(myStruct)]
それから私はそれをそのように呼びます:
Myfoo = myStruct
Foo = pointer(Myfoo)
Bar = library.func(Foo)
for i in range(Bar):
print("id = %u, name = %s" % (Foo[i].id, Foo[i].name))
バーには、funcによって割り当てられた構造の数が含まれています。
何をしても、Fooからデータを取得することはできません。私はこれについて何ヶ月もの間、複数の異なるバリエーションを試しました。Cライブラリからログを見ることができ、データを取得して返すことはわかっていますが、Pythonからデータを抽出する方法が見つからないようです。
何かご意見は?