python 调用 c dll 传递给 wchar**

标签 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** 之外,所有参数都正常通过。我显然遗漏了一些东西但看不到它,有什么想法吗?

python 3/ window

TIA

最佳答案

我认为您试图声明函数参数(顺便说一句,您正在将其分配给 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)

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

我还传递了两个参数,而您似乎只传递了一个。

关于python 调用 c dll 传递给 wchar**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34873792/

相关文章:

Python - 字符串到 JSON。错误: AttributeError: 'str' object has no attribute 'get'

c - Linux下的DES加密

Python Ctypes Null 终止字符串 block

c - Linux 内核模块奇怪的行为

python - 结构子类列表在转换为 numpy 数组时返回错误值

python - 改变 XWindow 的几何形状

Python。 nwise numpy 数组迭代

python - 在 groupby 循环中编号和创建数据帧

android - 如何使用appium自动化android手机后退按钮

c - 使用全局变量的递归函数的 GCC 优化差异