3
我有一個暴露的函數具有以下簽名德里DLL:其中記錄的方式規定如何使用ctypes訪問返回在Delphi 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;
現在我的問題是:我怎麼能存取權限MYFUNC的結果用Python ctypes調用dll?我編寫模仿類型
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)
我收到訪問衝突錯誤。
謝謝你的回覆。你最後一段的含義是什麼?我可以有一個小的代碼示例嗎? –
我的意思是,如果記錄大於寄存器的大小,那麼函數返回值將由Delphi和其他工具以不同方式處理。所以不要將記錄作爲返回值傳遞。 –
也許他也可能使用OLE類似數據類型和var-arrays –