LP_ *(例:LP_c_char)と* _p(例:c_char_p)の違いをPythonのctypesで理解できない場合があります。それらを区別する文書はありますか?ctypesのLP_ *ポインタと* _pポインタの違いは何ですか?
私が* _pポインタについて読んだことは、(いくつかの不特定の方法で)より優れていることを示唆していますが、構造フィールドとして使用しようとすると、私は奇妙な動作をします。例えば、私はLP_c_charポインタフィールドを持つ構造体を作成することができます
import ctypes
char = ctypes.c_char('a')
class LP_Struct(ctypes.Structure):
_fields_ = [('ptr', ctypes.POINTER(ctypes.c_char))]
struct = LP_Struct(ctypes.pointer(char))
print type(struct.ptr)
を、そして得られたポインタは次のとおりです。
<class 'ctypes.LP_c_char'>
しかし、私はc_char_pポインタフィールドを持つ構造体を作成します。
class Struct_p(ctypes.Structure):
_fields_ = [('ptr', ctypes.c_char_p)]
p = ctypes.pointer(char)
struct = Struct_p(ctypes.cast(p, ctypes.c_char_p))
print type(struct.ptr)
得られた "PTR" フィールドは
<type 'str'>
です
つまり、ポインタはプロセスのどこかで参照解除されています。