先贴停止工作的截图
具体的函数定义是这样的
//获取二维码
//参数
//object 接口指针对象
//result 二级指针,返回执行结果 on 字符串,返回执行结果
int WINAPI GetQRCode(void** object, char **result);
我的 python 代码
# 之前的代码就忽略了,wx_user 已经创建好,没有问题。
buffer = create_string_buffer(3000)
result = lib.GetQRCode(wx_user, buffer)
# result = lib.GetQRCode(wx_user, pointer(buffer))
# result = lib.GetQRCode(wx_user, addressof(buffer))
因为传入的第二个参数是要可写的,所以创建了一个可写的缓冲区,希望 dll 将字符串写到这个指针所指向的内存中,之后我再通过 python 读取出来,实现将一个字符串传递出来,而不是通过返回值的方式。
但是我试了好多种办法,包括代码中的三种,还有设置参数和返回值类型的方式都不行,都会在写的时候导致 python 停止运行。
查询了异常代码,可能是在写内存的时候(越界或者其他的错误)导致的问题。
可是这个创建缓冲区的方式是官方文档里找到的,只有这一个函数来创建可以写的内存。
也找了其他语言调用这个这个函数的方式,C# 是直接传入一个整形的值,调试了下看得出来应该是内存地址的整数形式,易语言是传入了一个整形变量的地址,这两种都可以成功调用,我用 python 也模拟了两个方式,都不能成功调用。
所以想问问有没有 ctypes 用的数量的大佬,帮忙看看。万分感谢。
附:dll 只有 api 文档, 没有源码,只能通过文档去调用。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.