我安装了一个 C++ API 应用程序,其中包含几个 DLL(A.DLL
and B.DLL
)在我的程序文件夹中。A.DLL
依赖于B.DLL
我可以成功加载它们ctypes.WinDLL
IF 从安装文件夹中,例如C:\Programs Files\XXX-API\A.DLL
而如果我将文件夹移动到另一个地方C:\TEMP\
,Python cytes load 会抱怨找不到B.DLL
.
我正在调查winmode https://docs.python.org/3/library/ctypes.html#ctypes.WinDLL,看起来可以解决问题。这winmode
似乎从参数中获取一个整数质谱参考 https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibraryexa .
例如 :
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
0x00000100
To use LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
,通过0x00000100
as 256
to winmode
? ctype会报错找不到B.DLL
,我不确定缺少什么,感谢您的任何想法,谢谢!
ctypes.WinDLL(path_to_A_DLL , winmode = 256 )
替代方案 1:
import nt
_func1 = ctypes.WinDLL(lib_name, winmode = nt._LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)
替代方案 2:
_func1 = ctypes.WinDLL(lib_name, winmode = 0x100)
应该两者都有效。
但整天都在尝试 os.add_dll_directory() 。最后切换到
_func1 = ctypes.WinDLL(absolute_lib_path, winmode = 0x8)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)