【发布时间】:2016-09-27 20:57:10
【问题描述】:
我有 proj1.dll,它依赖于另一个 DLL,proj2.dll。我在 VS2013 中编译 proj2.dll 时针对编译器输出的导入库编译了 proj1.dll。我还导出了我有兴趣使用的公共函数。所以现在我有两个独立的 DLL,它们都符合“cdll”标准。
我想在 Python 中使用 proj1.dll,但遇到以下问题:
import ctypes
# Crashes saying no entry point for "some_func" in proj2.dll
ctypes.cdll.LoadLibrary("C:\myfolder\proj1.dll")
ctypes.cdll.LoadLibrary("C:\myfolder\proj2.dll") # Loads fine
ctypes.cdll.LoadLibrary("C:\myfolder\proj1.dll") # Loads fine if proj2 is loaded first
以前,当我将 proj2 构建为静态库并在 proj1 中链接它时,从 Python 调用此 DLL 是可行的。这两个 DLL 存在于同一个文件夹中。我什至尝试将文件夹的路径添加到我的 PATH 环境变量中,以查看这是否是路径问题,但没有任何改变。
我假设 Windows 会加载 proj1.dll 然后加载 dll 的依赖项。我错了吗?调用者(Python)是否必须首先加载依赖 DLL?有人知道为什么会这样吗?
【问题讨论】:
-
myfolder在您的路径中吗?您可能需要检查您的proj1.dll以确认它包含依赖项。 stackoverflow.com/questions/7378959/… -
Python 版本是什么?错误是什么?
-
@CristiFati 我不确定 OP 是否还在回答您的问题。我确实打开了赏金,因为我有一个非常相似的问题 (stackoverflow.com/questions/61717476/…),并认为对这个问题的更完整的答案也会回答我的问题(我会关闭我的问题,因为在此处发布了一个很好的答案)。随意检查其他问题并在那里提问,也许我会反过来做。
-
@Holt:所以,这是一个不同于指出问题的问题。
标签: python c++ dll loadlibrary