<p>清单<a href="https://docs.python.org/3/library/ctypes.html#module-ctypes" rel="nofollow noreferrer">[Python 3.Docs]: ctypes - A foreign function library for Python</a></p>
<p>最简单的方法是将<em>C</em>代码保持原样(不要过多考虑),并将其转换为<em>Python</em>:</p>
<blockquote>
<pre class="lang-py prettyprint-override"><code>>>> import ctypes as ct
>>>
>>> Callback = ct.CFUNCTYPE(None) # Generic callback type - might be a ct.c_void_p as well
>>> CallbackArray = Callback * 5
>>>
>>> Callback1 = ct.CFUNCTYPE(None, ct.c_ulong, ct.c_ulong)
>>> def func1(long1, long2): pass
...
>>> callback1 = Callback1(func1)
>>>
>>> # The rest of Callback# func# and callback#
>>>
>>> callback_array = CallbackArray()
>>> callback_array
<__main__.CFunctionType_Array_5 object at 0x000001517253CA48>
>>> callback_array[0]
<CFunctionType object at 0x000001517240BBA8>
>>>
>>> callback_array[0] = ct.cast(callback1, Callback) # !!! Conversion needed !!!
>>> callback_array[0]
<CFunctionType object at 0x000001517240BE18>
>>> # Same thing for callback_array[1] .. callback_array[4]
</code></pre>
</blockquote>
<p>其余的代码(我没有将其粘贴到控制台中,因为它不起作用):</p>
<pre class="lang-py prettyprint-override"><code>lib = ct.CDLL("./lib.so")
lib.init.argtypes = [CallbackArray] # Check the URL at the end
lib.init(callback_array)
</code></pre>
<p>始终为从<em>.dll</em>导入的函数定义<em>argtypes</em>(和<em>restype</em>)。查看<a href="https://stackoverflow.com/questions/58610333/c-function-called-from-python-via-ctypes-returns-incorrect-value/58611011#58611011">[SO]: C function called from Python via ctypes returns incorrect value (@CristiFati's answer)</a>了解更多详细信息</p>