python调用c dll传递给wchar **

时间:2016-01-19 10:03:44

标签: python c ctypes

我需要更改一些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

1 个答案:

答案 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)

即。创建一个指针类型数组,实例化它并传递它。

我也传递两个参数,你似乎只传递了一个。