开发者社区 问答 正文

python调用C写的dll?报错

@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!')

看到请回复啊,谢谢喽

展开
收起
爱吃鱼的程序员 2020-06-14 17:29:03 660 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

           谢谢提问。我看了一下,感觉就是参数调用的问题。就是传入的参数也许不止一个,或者传入的是int,结果被解析为float,或者为float,解析为int...这些都有可能,具体要看你封装的这个dll中函数的定义。

           个人能力有限,无法再看到更多了,抱歉。

    恩,自己在研究一下,谢谢

    需要指定参数的类型,如果有多个参数都需写入参数列表中:

    byid=dll.AR_OpenById

    byid.argtypes=[ctypes.c_int]

    byid.restypes=ctypes.c_int

    rtn=byid(0)

    2020-06-14 17:29:22
    赞同 展开评论
问答分类:
问答标签:
问答地址: