我有一个定义结构的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] 删除。
我来说两句