擅长:python、mysql、java
<p>DLL使用<code>__cdecl</code>调用约定而不是<code>__stdcall</code>,因此请使用<code>CDLL</code>而不是{<cd4>}:</p>
<pre><code>>>> from ctypes import *
>>> lib=CDLL('EposCmd64')
>>> buf=create_string_buffer(80)
>>> lib.VCS_GetErrorInfo(0x05030000,buf,80)
1
>>> buf.value
b'Toggle Error'
</code></pre>
<p>注意,所有额外的对象构造<code>wintypes.DWORD(0x05030000)</code>都是不必要的。<code>ctypes</code>判断出它是整数还是指针,但需要知道结构和浮点值。在这种情况下不需要,但下面是如何显式定义参数和返回值:</p>
^{pr2}$
<p>它还可以防止由于额外的类型检查和参数匹配而错误地调用函数:</p>
<pre><code>>>> lib.VCS_GetErrorInfo(0x05040000,buf)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: this function takes at least 3 arguments (2 given)
</code></pre>
<p>为<code>0</code>返回空字符串(无错误):</p>
<pre><code>>>> lib.VCS_GetErrorInfo(0,buf,80)
1
>>> buf.value
b''
</code></pre>