我恐怕在互联网上找不到一个简单的答案,所以也许将来有一个因为这个问题!
我正在使用pywiiuse,一个用于Windows上的C wiiuse库的python包装器。通过在源代码目录中包含dll,header和library,我得到了几个简单的C示例。
但是,我想知道在哪里放dll以便pywiiuse会找到它。查看源代码显示它按如下方式加载:
dll = ctypes.cdll.wiiuse
当我在与测试示例相同的目录中使用dll时,运行示例会产生模块未找到异常。
python在哪里寻找DLL?
Windows DLL search order记录在MSDN上。它不是特定于Python的,并且无法从命令行选项更改搜索顺序。 (但请参阅链接文章了解影响搜索顺序的其他方法。)
ctypes/__init__.py
的来源确实:
from _ctypes import LoadLibrary as _dlopen
我无法在LoadLibrary
中找到_ctypes.c
的定义,但可能它是Windows LoadLibraryEx
函数的包装器,其行为与POSIX dlopen
函数类似,因为它就是如何使用的。
如果您可以修改Python源代码以使用ctypes.CDLL
构造函数,它应该工作:
folder = os.path.dirname(os.path.abspath(__file__))
dll_path = os.path.join(folder, "wiiuse.dll")
dll = ctypes.CDLL(dll_path)
如果这不可行,你可能能够修补ctypes以处理这种特殊情况,但这似乎有点危险。也许只是将DLL复制到与Python DLL在同一文件夹中将是最简单的选择。
使用Windows API在自定义文件夹中加载自定义DLL需要几个步骤:
if path.exists(cwd() + "bin" + "mydll.dll"): return cwd() + "bin"
。或者,如果你感到勇敢,只需设置路径。