Python ctypes中的ULONG_PTR

2024-07-05 11:42:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Windows上使用pythonctypes库并实现了一个OVERLAPPED结构。它有两个ULONG_PTR类型的成员,在中不可用ctypes.wintypes. 根据Microsoft的说法,ULONG是一个取决于指针大小的ULONG。我能用吗wintypes.ULONG不是Python中的ULONG-u-PTR,还是有更好的方法?在

我发现了几种不同的重叠结构实现:使用here指针(ULONG))代替了ULONG_PTR和here-LPVOID。但是ulongu PTR不是一个指针,所以IMHO这些不是正确的类型。我错了吗?我试过LPVOID,它很管用,但我不是C语言的人,所以我想知道我的情况有什么不同吗?在


Tags: 方法类型herewindows成员ctypes结构microsoft
1条回答
网友
1楼 · 发布于 2024-07-05 11:42:16

使用c_void_p或{}。{cd3}和实际的cd3}类型无关。在

使用POINTER(ULONG)可以工作,但是POINTER(c_char)或任何其他指针类型也可以。类型仍然是错误的,除非现在您正在分配一个实际上并不需要的新类型对象。在

如果需要使用内部成员的“正确”类型来访问内部成员,则需要定义两个不同的重叠结构之一,具体取决于您使用的是32位还是64位版本的Python。比如:

if ctypes.sizeof(ctypes.c_void_p) == 8:
    ULONG_PTR = ctypes.u_longlong
else:
    ULONG_PTR = ctypes.u_long

class OVERLAPPED(ctypes.Structure): 
    _fields_ = [("Internal", ULONG_PTR),
                ("InternalHigh", ULONG_PTR),
                ...]

相关问题 更多 >