在Windows上python在哪里寻找ctypes.cdll。打开的dll?

| 我很想在互联网上找不到一个简单的答案,所以将来可能会因为这个问题而有一个答案! 我正在使用pywiiuse,这是Windows上C wiiuse库的python包装器。通过在源目录中包含dll,标头和库,我已经获得了几个简单的C示例。 但是,我想知道将dll放在哪里,以便pywiiuse可以找到它。查看源代码可以看到它的加载方式如下:
dll = ctypes.cdll.wiiuse
当我将dll与测试示例放在同一目录中时,运行示例将产生模块未找到异常。 python在哪里寻找dll?     
已邀请:
        Windows DLL搜索顺序记录在MSDN上。它不是特定于Python的,因此无法通过命令行选项更改搜索顺序。 (但请参阅链接的文章,以了解其他影响搜索顺序的方法。)
ctypes/__init__.py
的来源是:
from _ctypes import LoadLibrary as _dlopen
我无法在
_ctypes.c
中找到
LoadLibrary
的定义,但大概是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\"
。或者,如果您感到勇敢,那就设置路径。 使用ctypes加载Kernel32.dll-它知道该本地代码。 从Kernel32.dll加载SetDllDirectory。使用您知道dll所在位置的路径来调用它。 现在,LoadLibrary将在该文件夹中搜索Dll,因此您可以使用ctypes加载dll并调用函数。     

要回复问题请先登录注册