首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python类型中的ULONG_PTR

Python类型中的ULONG_PTR
EN

Stack Overflow用户
提问于 2016-05-20 18:19:31
回答 1查看 1.4K关注 0票数 0

我在Windows上使用Python库并实现了一个重叠结构。它有两个ULONG_PTR类型的成员,在ctypes.wintypes中不可用。根据微软,ULONG_PTR是一个ULONG,它取决于指针的大小。我是否可以在Python中使用wintypes.ULONG而不是ULONG_PTR,或者有更好的方法?

我发现了几种不同的重叠结构实现:这里指针(ULONG)代替了ULONG_PTR和这里 - LPVOID。但是ULONG_PTR不是指针,所以IMHO不适合使用这些类型。我说错了吗?我试过LPVOID,它有效,但我不是C人,所以我想知道我的情况有什么不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-20 18:30:25

使用c_void_pLPVOID。这将是指针的大小,而实际类型并不重要,因为您永远不会访问InternalInternalHigh成员。

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

如果需要使用它们的“正确”类型访问内部成员,则需要定义两种不同的重叠结构中的一种,这取决于您使用的是32位版本还是64位版本的Python。类似于:

代码语言:javascript
复制
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),
                ...]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37353373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档