次のシグネチャを持つ関数を公開しているデリー DLL があります。
Function MyFunc(ObjID : Cardinal) : TMyRec; stdcall;
レコードは次のように定義されています。
type TMyRec = record
Count : Cardinal;
Items : array of TMyItemRec;
end;
type TMyItemRec = record
ID : Cardinal;
Params : array of String;
end;
私の質問は、Python ctypes で dll を呼び出す MyFunc の結果にアクセスするにはどうすればよいですか? 型を模倣する 2 つのクラスをコーディングしました
from ctypes import *
class TMyItemRec(Structure):
_fields_ = [("ID", c_int), ("Params", POINTER(c_wchar_p))]
class TMyRec(Structure):
_fields_ = [("Count", c_int), ("Params", POINTER(TMyItemRec))]
しかし、次のようなデータを読み取ろうとすると:
my_dll = windll.Script
def GetMyRec(ID):
my_dll.MyFunc.argtypes = [c_uint]
my_dll.MyFunc.restype = TClilocRec
return my_dll.Script_GetClilocRec(ID)
アクセス違反のエラーが発生します。