【发布时间】:2010-09-13 21:57:07
【问题描述】:
我能够通过 dll 函数获得一个填充的结构(因为它似乎使用x=buffer(MyData) 然后repr(str(buffer(x))) 来查看它。
但如果我尝试使用 .value 访问结构的元素,则会引发错误。
我有一个 VarDefs.h 需要这样的结构:
typedef struct
{
char Var1[8+1];
char Var2[11+1];
char Var3[3+1];
...
}TMyData
应该传递给这样的函数:
__declspec(dllexport) int AFunction(TOtherData *OtherData, TMyData *MyData);
在 Python 中,我现在能够以这种方式声明结构(感谢 Martelli 先生:请参阅此处Python ctypes - dll function accepting structures crashes):
class TMyData( Structure ):
_fields_ = [
("Var1" , type( create_string_buffer(9) ) ),
("Var2" , type( create_string_buffer(12)) ),
...
我这样调用函数:result = Afunction( byref(OtherData) , byref(MyData ) )
如前所述,当我尝试访问 MyData.Var1.value 时出现错误(抱歉,现在不能更具体了!),但 repr(str(x)) 其中 x 是 buffer(MyData) 的副本表明其中有数据它!
我应该怎么做呢?谢谢!
【问题讨论】:
-
我在这里看到了一些可能有问题的地方,但是很难帮助您解决本质上“它不起作用”的问题。
-
顺便说一句,我之前的评论并不是要作为被动攻击性的蛇,而是要求更准确的错误或堆栈跟踪:-)。