<p>清单<a href="https://docs.python.org/library/ctypes.html#module-ctypes" rel="nofollow noreferrer">[Python.Docs]: ctypes - A foreign function library for Python</a></p>
<p>您的代码存在一些问题:</p>
<ol>
<li><p>主要的一点是:</p>
<ul>
<li><a href="https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea" rel="nofollow noreferrer">[MS.Docs]: GetModuleHandleA function (libloaderapi.h)</a>(或来自<em>WinAPI</em>的任何<em>ANSI</em>函数变体)将<em>8bit</em>字符串(<em><strong>char*</strong></em>)作为参数</li>
<li>在<em>Python<strong>3</strong></em>(我假设您正在使用)中,字符串是<em>16位</em>(<em><strong>wchar\t*</strong></em>)</li>
</ul>
<p>要克服这个问题,您应该使用:<em>kernel32.GetModuleHandle<strong>W</strong></em>。例如:</p>
<blockquote>
<pre class="lang-py prettyprint-override"><code>>>> import ctypes as ct
>>> # kernel32 is alsready loaded
>>> ct.windll.kernel32.GetModuleHandleA("kernel32")
0
>>> ct.windll.kernel32.GetModuleHandleW("kernel32")
-1613692928
</code></pre>
</blockquote>
</li>
<li><p>有关通过<em>CTypes</em>从<em>.dll</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>(特别是,您应该将<em>重新类型</em>设置为<em>64位</em>值,<em>例如</em><em>wintypes.HMODULE</em>)</p>
</li>
<li><p>没有必要使用<em>GetModuleHandle</em>(使前面的两个项目对这个特定案例没有意义,但我留下了它们,因为它们包含有用的一般信息)。您可以简单地使用<strong><code>load_addr = windll.LoadLibrary(sys.argv[1])._handle</code></strong></p>
</li>
<li><p>参数验证应为1<sup>st</sup></p>
</li>
</ol>