我正在编写一些 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”的多个实例具有不同的大小。
一旦尺寸已知,只需使用工厂来定义结构即可。
http://docs.python.org/library/ctypes.html#variable-sized-data-types 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)