想要用python 调用dll 必须应用ctypes module
如果你用的32位python 调用 dll 请使用 CDLL方法, 64位的请使用WINDLL方法

上图是 c, ctypes, python 数据类型对照, 基本数据类型ctypes 都有了.
dll中一个函数是int sd_EnumDevice(char** szDevNames, ULONG *pulLen) char** szDevNames 这个参数为2级指针,对于没有c基础的同学很难理解(我也不太理解这里的参数为什么要用这种类型),简单点说就是指向指针的指针.这个地方我也查了很多资料但是网上的资料真的不多.最后终于找到一段代码
string_buffers = [create_string_buffer(64) for i in range(1)]
pointers = (c_char_p*4)(*map(addressof, string_buffers))
这里还要顺带说一下python 默认的 string 值是不可变的, 不能传递 string 到一个 C 函数去改变它的内容,所以需要使用 create_string_buffer

本文记录了使用Python的ctypes模块调用DLL时遇到的二级指针参数问题。针对C函数int sd_EnumDevice(char** szDevNames, ULONG *pulLen),解释了char**参数的意义,并提供了创建可变字符串缓冲区和使用byref()处理参数的方法,以解决调用过程中遇到的挑战。"
73251396,5641293,Dragonboard 410c: 确定Kernel defconfig与DTS配置,"['dragonboard-410c', '96Boards', 'kernel配置', '设备树', 'Android开发']
最低0.47元/天 解锁文章
1070





