class MyValue(Union):
_fields_ = [
("ftNone" , c_void_p),
("ftString", c_char_p),
("ftInt" , c_int ),
("ftBigInt", c_long ),
("ftFloat" , c_char_p)
]
MyValues = MyValue * 20
CMethod(MyValues(
('ftInt' = 12),
('ftString' = 'testing')
))
还是有更好的方法?。我基本上想把一个混合类型的数组传递给我的DLL。你知道吗
ctypes数组是用位置参数初始化的。初始值可以是ctypes数据对象、与简单数据类型兼容的Python对象(对于
c_int * 20
等简单类型的数组),也可以是用于创建要复制到数组中的数组数据类型的临时实例(memcpy
)的位置参数元组。你知道吗由于需要关键字参数来选择适当的转换器,因此必须调用
MyValue
来手动创建临时实例,或者对单元化数组的每个项调用setattr
。对于前者,可以将生成器表达式与*
和**
解包结合使用(请参见tutorial):下面是另一种使用^{} 更新循环中数组的方法:
最好在^{} (Modules/ctypes/\u ctypes.c)中添加对关键字参数dict的支持。你知道吗
相关问题 更多 >
编程相关推荐