Python错误集锦:ctypes定义函数入参类型时提示TypeError: _argtypes_ must be a sequence of types

原文链接:http://www.juzicode.com/archives/4127

错误提示:

ctypes定义函数入参类型时提示TypeError: argtypes must be a sequence of types

# juzicode.com/ VX: 桔子code  
from ctypes import *
import os,sys,platform

print('sys.version:',sys.version) 

add_path = os.path.split(os.path.abspath(__file__))[0]+'\\'
pyt = CDLL(add_path+'pytest.dll')  

pyt.addint.restype=c_int     
pyt.addint.argtypes=(c_int)
z = pyt.addint(10,20)          
print('z =',z) 
==========运行结果:
sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
 Traceback (most recent call last):
   File "ctypes-test4.py", line 11, in 
     pyt.addint.argtypes=(c_int)
 TypeError: argtypes must be a sequence of types

错误原因:

1、argtypes=(c_int)处错误,argstypes应该是一个tuple或者list类型,所有即使在入参只有1个的时候,也应该在第1个参数类型后面使用逗号”,”

解决方法:

1、在定义argstypes时使用tuple类型,即使只有1个参数也要在参数后面使用逗号“,” : pyt.addint.argtypes=(c_int,)

# juzicode.com/ VX: 桔子code  
from ctypes import *
import os,sys,platform

print('sys.version:',sys.version) 

add_path = os.path.split(os.path.abspath(__file__))[0]+'\\'
pyt = CDLL(add_path+'pytest.dll')  

pyt.addint.restype=c_int     
#pyt.addint.argtypes=(c_int)
pyt.addint.argtypes=(c_int,)
z = pyt.addint(10,20)          
print('z =',z) 


==========运行结果:
sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
 z = 30

扩展内容:

  1. Python进阶教程m7–混合编程–调用可执行文件
  2. Python进阶教程m7b–混合编程–C语言接口ctypes(1)
  3. Python进阶教程m7c–混合编程–C语言接口ctypes(2)
  4. Python进阶教程m7d–混合编程–代码级扩展
  5. 非工作路径、非入口路径如何导入Python自定义模块


关注微信公众号:“桔子code”,欢迎后台留言撩我,我会尽我所能为你解惑

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注