我有一个C ++ .dll函数,我通过python 3.2访问语法:
int Create(char argID)
我试图使用python访问此函数。我可以访问它,但每当我尝试将函数传递给参数时,我很困惑为什么它会告诉'错误类型'。 Python脚本:
Create.argtypes = [c_char]
Create.restype = c_int
ID = c_char
ID = input("Enter ID:")
Create(ID) #ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type
不确定我哪里出错或是否有其他方式从用户输入传递一个或多个字符?请帮助。
干杯。
答案 0 :(得分:2)
c_char是一个单字节值,而不是Unicode字符串。设置ID = bytes(ID, 'utf8')[0]
(或使用与'utf8'不同的8位字符映射,例如'latin-1')。然后你可以拨打Create(ID)
。
顺便说一下,为c_char分配ID只会给你另一个对c_char的引用,然后你立即将ID重新分配给input
返回的字符串。我唯一一次看到这是人们使用ctypes的时候。就像大脑陷入静态打字模式一样。
答案 1 :(得分:0)
您的Create函数接受单个char作为参数,而不是字符串。
s = input("enter ID:")
c = ctypes.c_char(s[0])
Create(c)