我正在使用Python 2.7并试图加载一个包含ctypes的dll:
lib = ctypes.cdll.LoadLibrary("mylib.dll")
它有时会抛出以下错误,而有时它运行正常。同样,对于Python 3,总是抛出以下错误:
libcrypto = ctypes.cdll.LoadLibrary("data\openvpn\libeay32") File "C:\Python27\lib\ctypes__init__.py", line 440, in LoadLibrary return self._dlltype(name) File "C:\Python27\lib\ctypes__init__.py", line 362, in init self._handle = _dlopen(self._name, mode) WindowsError: [Error 487] Attempt to access invalid address
我们在一个FIPS认证的OpenSSL版本上也遇到了类似的问题。不幸的是,该版本的OpenSSL需要加载到特定的内存地址。如果在启动应用程序时尝试加载OpenSSL太晚,那么它所需的内存地址已被另一个依赖项占用。我们能想到的最好的“修复”方法是确保OpenSSL(libeay32.dll)尽快加载到内存地址空间中。在
在您的例子中,在Python脚本的顶部添加以下行(注意:在顶部表示在任何其他可执行代码行之前,包括import语句):
或者,您可以确保libeay32.dll是中列出的第一个依赖项mylib.dll。在
开始编辑
在我的例子中,虽然上面的代码有助于提高成功的概率,但在某些情况下,它仍然加载OpenSSL DLL太迟了。为了解决这个问题,我必须创建一个新的Python包装器,它可以在C++中执行,代码如下:
^{pr2}$请注意,我还必须采取以下额外行动:
调用生成的可执行文件而不是python.exe同样的论点,这个错误应该会消失。在
相关问题 更多 >
编程相关推荐