【发布时间】:2011-02-28 03:47:31
【问题描述】:
我有一个 Python 模块 wrapper.py,它包装了一个 C DLL。 DLL 与模块位于同一文件夹中。因此,我使用下面的代码来加载它:
myDll = ctypes.CDLL("MyCDLL.dll")
如果我从它自己的文件夹中执行wrapper.py,这将有效。但是,如果我从其他地方运行它,它就会失败。这是因为 ctypes 会计算相对于当前工作目录的路径。
我的问题是,有没有一种方法可以指定 DLL 相对于包装器的路径而不是当前工作目录?这将使我能够将两者一起发布,并允许用户从任何地方运行/导入包装器。
【问题讨论】:
-
我使用selected answer 中的方法,但在一种情况下,我有一个从另一个 dll 导入导出的 dll,它不会加载。解决方案是先加载另一个 dll,例如:
_DIRNAME = os.path.dirname(__file__); required_dll = ctypes.cdll.LoadLibrary(os.path.join(_DIRNAME, required.dll)); main_dll = ctypes.cdll.LoadLibrary(os.path.join(_DIRNAME, main.dll))瞧,这行得通!