我正在编写一些python代码来与一个广泛使用结构的C DLL进行交互.
其中一个结构包含嵌套结构.我知道这对ctypes模块来说不是问题.问题是有一个经常使用的结构,在C中,是通过宏定义的,因为它包含一个可以变化的"静态"长度数组.这是令人困惑的,所以这里是一些代码
struct VarHdr {
int size;
}
#define VAR(size) \
struct Var {
VarHdr hdr;
unsigned char Array[(size)];
}
Run Code Online (Sandbox Code Playgroud)
然后它用在像这样的其他结构中
struct MySruct {
int foo;
VAR(20) stuffArray;
}
Run Code Online (Sandbox Code Playgroud)
接下来的问题是如何在Python中模拟这个问题,结果可以在我的pythong脚本和DLL之间来回传递结果.
顺便说一句,我知道我可以对那里的数字进行硬编码,但是这个"VAR"的几个实例都有不同的大小.
只要知道尺寸,就可以使用工厂来定义结构.
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |