使用未知字段类型定义python ctypes结构

和风

我有一个定义结构的dll。在此结构中,是一个具有类型的字段,CRITICAL_SECTION包含在中windows.h如何在python中定义ctypes结构以引用此类型?由于CRITICAL_SECTION本身是一个结构(在其自己的定义中引用了其他结构),我是否真的必须定义python ctype等效项,以便我拥有一个CRITICAL_SECTION可以引用的python 有没有更好的办法?

示例C程序:

...
typedef struct some_struct {
    ...
    CRITICAL_SECTION field1;
} SOME_STRUCT;
...

示例Python程序:

...
class SOME_STRUCT(Structure):
    _fields_ = [... ('field1', CRITICAL_SECTION)]

如何使ctypes识别出什么CRITICAL_SECTION什么,而不必费力地将所有内容定义为ctypes可以识别的原始类型?

马克·托洛宁

您只需要正确确定顶层结构的大小即可。InitializeCriticalSection应该处理设置结构。

查看Windows标头,这应在32位和64位系统上工作:

from ctypes import *
from ctypes import wintypes as w

# Set to an unsigned int type that is 32- or 64-bit depending on OS architecture.
# I didn't see a wintype that worked.
ULONG_PTR = c_size_t

class CRITICAL_SECTION(Structure):
    _fields_ = [('DebugInfo',w.LPVOID),
                ('LockCount',w.LONG),
                ('RecursionCount',w.LONG),
                ('OwningThread',w.HANDLE),
                ('LockSemaphore',w.HANDLE),
                ('SpinCount',ULONG_PTR)]

k32 = WinDLL('kernel32')
InitializeCriticalSection = k32.InitializeCriticalSection
InitializeCriticalSection.argtypes = POINTER(CRITICAL_SECTION),
InitializeCriticalSection.restype = None

s = CRITICAL_SECTION()
InitializeCriticalSection(byref(s))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C结构的Python ctypes定义

python中的ctypes结构数组

ctypes,python中的循环结构

在 Python 中动态定义/更新 ctypes 结构

如何使用ctypes从Python创建C结构?

Ctypes:获取指向结构字段的指针

ctypes:结构,size_t字段

python ctypes结构错误的字节大小

Python ctypes对齐数据结构

具有函数和python ctypes的结构

创建数据类型以使用ctypes包装结构

Python ctypes在结构字段中将指针传递给Fortran派生类型

Python无法使用Python的ctypes读取包含char数组的结构

使用 ctypes 将结构从 C 传递到 Python

在 Python 中使用 Ctypes 读取 Dll 的双 c 结构

ctypes-查看返回的结构的c_char_p字段

在python类中包装ctypes结构会导致内存错误

使用ctypes覆盖库中的可访问结构

如何在ctypes中使用指向自身的指针设置结构?

如何为MS Windows PACKAGE_ID和PACKAGE_INFO结构创建Python ctypes结构?

有没有办法使用循环分配 ctypes 结构的字段?

如何通过ctypes在python中对包含对其定义的引用的结构进行建模?

如何使用ctypes读取具有自定义结构的dll的输出?

在不使用C函数的情况下更新ctypes python中的结构指针的值

ctypes结构字段中的固定大小char数组和初始化

如何访问存储在通过 ctypes 返回给 Python 的 C 结构内的数组中的值?

通过Ctypes从C到Python-将函数指针的结构包装为静态函数

如何将结构从python传递到共享对象中的ctypes函数?

python和ctypes访问带有嵌套结构的c++类