我正在创建一个 ctype 结构。我有一个外部函数,需要将指向该结构的指针传递给它。ctype 结构中应该有一个 void 指针。
示例函数原型:
ExtFunc(
TestStruct* myVoidStruct
);
其中我的 C 等效结构定义如下:
typedef struct voidStruct
{
void* voidField;
} voidStruct;
我试图创建这样一个结构,但 void 指针总是被 Python 解释为不是 void 指针。
如果有的话,这有什么影响?这是否意味着外部函数也将结构的这个元素解释为 void 指针以外的东西?
>>> class TestStruct(ctypes.Structure):
_fields_ = [("voidField", ctypes.c_void_p)]
>>> x = TestStruct()
并且马上, voidField 作为 NoneType 返回
>>> type(x.voidField)
<type 'NoneType'>
但是,我可以在结构之外创建和维持一个 void 指针:
>>> y = ctypes.c_void_p(123)
>>> y
c_void_p(123L)
正如我上面所说,我将我的结构传递给外部函数。当函数完成时,结构元素的类型为“long”,具有关联的值
>>> x.voidField
88145984L
>>> type(x.voidField)
<type 'long'>
为什么现在是 long 类型?它的价值有什么意义?这是指针的内存地址吗?指针指向的内存地址?还是它指向的内存地址的前几个字节的值?