Ctypes DLL使用c_char_Array调用ArgumentError

时间:2018-10-29 11:20:40

标签: python typeerror ctypes

我正在尝试为C项目编写Python DLL包装器

重要的原始C代码:

  1. char IOmap[4096];
  2. int ec_config_overlap(uint8 usetable, void *pIOmap);

Python包装器

  1. IOMap = ctypes.POINTER(ctypes.c_char * 4096)
  2. 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?

1 个答案:

答案 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]