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'>
なぜ今は長いタイプなのですか?そして、その価値の重要性は何ですか?これはポインタのメモリアドレスですか?ポインタが指しているメモリアドレスは? それとも、それが指しているメモリアドレスの最初の数バイトの値ですか?