我需要更改一些python代码来调用一个看起来像这样的c api:
int start_our_service(WCHAR * extra,int numargs,WCHAR ** args);
我有这个:
dll = ctypes.WinDLL(__DLL_PATH)
dll.restype = ctypes.c_int32
dll.argtypes = [ctypes.c_char_p, ctypes.c_int, POINTER(POINTER(ctypes.c_char_p))]
data = (ctypes.c_char_p)("-t:9".encode())
ptr = POINTER(ctypes.c_char_p)(data)
dll.start_service("TEST", 2, ctypes.byref(ptr))
除了最后一个WCHAR **之外,所有的args都通过了ok。我显然错过了一些东西,却看不到它,有什么想法吗?
python 3 / windows
TIA
答案 0 :(得分:1)
我认为你通过尝试声明函数参数(顺便说一下,你分配给dll而不是函数)来使事情过于复杂。我能提出的最简单的代码就是你想要做的事情:
argvector = ctypes.c_char_p * 2
args = argvector(b"-t=9", b"--verbose")
dll = ctypes.WinDLL(__DLL_PATH)
dll.start_service("TEST", 2, args)
即。创建一个指针类型数组,实例化它并传递它。
我也传递两个参数,你似乎只传递了一个。