我正在尝试为C项目编写Python DLL包装器
Python DLL包装器可以在这里找到: https://github.com/GitHubStefan13/SOEM-for-Python
重要的原始C代码:
char IOmap[4096];
int ec_config_overlap(uint8 usetable, void *pIOmap);
Python包装器
IOMap = ctypes.POINTER(ctypes.c_char * 4096)
c_ec_config_overlap = ethercat.ec_config_overlap
c_ec_config_overlap.argtypes = [ctypes.c_unit8, IOMap]
c_ec_config_overlap.restype = ctypes.c_int
当我试图用Python定义函数时
def ec_config_overlap(usetable, PIOMap):
return c_ec_config_overlap(usetable, PIOMap
并调用它。 我收到错误消息
ctypes.ArgumentError:参数2::预期的LPc_char_Array_4096实例,而不是_ctypes.PyPointerType。
我理解该错误,但如何解决却使ctype成为Array [4096]而不是PyPointerType?
答案 0 :(得分:0)
此语法创建数组实例:
UI
由于它是>>> import ctypes
>>> (ctypes.c_char*4096)()
<__main__.c_char_Array_4096 object at 0x0000024D84E2D7C8>
数组,因此您也可以使用:
char
您的函数类型应为:
>>> create_string_buffer(4096)
<__main__.c_char_Array_4096 object at 0x0000025AE48FE948>
但是为了获得更好的类型检查,您还可以使用:
c_ec_config_overlap.argtypes = [ctypes.c_uint8, ctypes.c_void_p]