我正在编写一些python代码来与广泛使用结构的C DLL进行交互。
其中一个结构包含嵌套结构。我知道这对ctypes模块来说不是问题。问题是有一个经常使用的结构,在C中,是通过宏定义的,因为它包含一个可以变化的“静态”长度数组。这令人困惑,所以这里有一些代码
struct VarHdr {
int size;
}
#define VAR(size) \
struct Var {
VarHdr hdr;
unsigned char Array[(size)];
}
然后在其他结构中使用它
struct MySruct {
int foo;
VAR(20) stuffArray;
}
接下来的问题是如何在Python中模拟这个结果,结果可以在我的pythong脚本和DLL之间来回传递。
顺便说一句,我知道我可以对那里的数字进行硬编码,但是这个“VAR”的几个实例都有不同的大小。答案 0 :(得分:6)
只要知道尺寸,就可以使用工厂来定义结构。
http://docs.python.org/library/ctypes.html#variable-sized-data-types:
使用可变大小数据的另一种方法 使用ctypes的类型是使用 Python的动态特性,以及 (重新)定义之后的数据类型 所需的尺寸已经知道了 个案基础。
(未经测试)示例:
def define_var_hdr(size):
class Var(Structure):
fields = [("size", c_int),
("Array", c_ubyte * size)]
return Var
var_class_10 = define_var_hdr(10)
var_class_20 = define_var_hdr(20)
var_instance_10 = var_class_10()
var_instance_20 = var_class_20()