@fzyz_sb 你好,想跟你请教个问题:windows平台上,Python调用C写的dll,dll采用cdecl,在调用AR_GetCount()函数时可以正确返回,调用AR_OpenByID()时,报错valueError:procedure called with enough arguments <4 bytes missing> or wrong calling convention.代码如下:
from ctypes import cdll
print ('starting...')
dll=cdll.LoadLibrary('./AmUfdHlp.dll')
count=dll.AR_GetCount()
print (count)
byid=dll.AR_OpenByID(0)
print ('Open succeed!')
看到请回复啊,谢谢喽
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
谢谢提问。我看了一下,感觉就是参数调用的问题。就是传入的参数也许不止一个,或者传入的是int,结果被解析为float,或者为float,解析为int...这些都有可能,具体要看你封装的这个dll中函数的定义。
个人能力有限,无法再看到更多了,抱歉。
恩,自己在研究一下,谢谢需要指定参数的类型,如果有多个参数都需写入参数列表中:
byid=dll.AR_OpenById
byid.argtypes=[ctypes.c_int]
byid.restypes=ctypes.c_int
rtn=byid(0)