<p>如果要测试ctypes,最好制作一个虚拟DLL。例如,函数的原型是(我发现它是<a href="http://www.c-plusplus.de/forum/296178-full" rel="nofollow">here</a>):</p>
<pre><code> Initialisation_DllExport BOOL __stdcall VCS_GetProtocolStackSettings(HANDLE KeyHandle, DWORD* pBaudrate, DWORD* pTimeout, DWORD* pErrorCode);
</code></pre>
<p>虚拟DLL将是:</p>
^{pr2}$
<p>所以我们的python代码是:</p>
<pre><code>#!python
from ctypes import *
BOOL = c_int
DWORD = c_ulong
HANDLE = c_void_p
lib = WinDLL('./lib.dll')
# BOOL __stdcall VCS_GetProtocolStackSettings(HANDLE KeyHandle,
# DWORD* pBaudrate,
# DWORD* pTimeout,
# DWORD* pErrorCode);
VCS_GetProtocolStackSettings = lib['VCS_GetProtocolStackSettings']
VCS_GetProtocolStackSettings.restype = BOOL
VCS_GetProtocolStackSettings.argtypes = [HANDLE,
POINTER(DWORD),
POINTER(DWORD),
POINTER(DWORD)]
KeyHandle = HANDLE(123)
Baudrate = DWORD(0)
Timeout = DWORD(0)
ErrorCode = DWORD(0)
result = BOOL(VCS_GetProtocolStackSettings(KeyHandle,
byref(Baudrate),
byref(Timeout),
byref(ErrorCode)))
print(Baudrate.value)
print(Timeout.value)
print(ErrorCode.value)
print(result.value)
</code></pre>
<p>如果运行它:</p>
<pre><code>> python example.py
123
1
2
3
4
>
</code></pre>