【发布时间】:2018-02-12 08:23:16
【问题描述】:
目前,我正在使用 LoadLibrary 函数来加载我的 xxx.dll 文件(xxx.dll 是我的私有 dll 文件)。它可以正常工作,但是有时无法加载库,错误代码为 126。
MyDll = LoadLibrary(DllPath.c_str());
DllPath(std::wstring 类型)是我的 dll 文件的路径。
我研究了错误,它的意思是“找不到模块”,但是我检查了目录是正确的,dll文件仍然存在。
我的 dll 文件是 32 位 dll,操作系统是 windows 64 位,启动服务时会加载 dll 文件。
这种情况很少发生,目前我无法重现此错误。 但是,每当发生错误时,总是无法加载 dll 文件,只有一种方法可以解决此问题,即删除并重新安装软件。
有谁知道这个问题的可能原因是什么?
感谢任何帮助!
【问题讨论】:
-
您是如何检查目录是否正确的?程序在哪里?
-
这也发生在我身上,虽然乍一看它似乎是完全随机的,但如果 DLL“最近没有加载”,我实际上从未见过它失败。我当前的解决方法是运行
while循环(尝试次数最多),直到成功加载 DLL,并在尝试之间随机休眠(持续时间 10-1000 毫秒,对我来说不是问题,因为我在专用于加载大型 DLL 的线程,无论如何这都会阻塞一段不平凡的时间)。 -
@TheTechel : 当问题发生在我的电脑上时,我打印了一个 dll 文件目录的日志,它是正确的,我还有一个检查 dll 文件是否仍然存在的功能。跨度>
-
@JohnWeisz :我还有一个 while 循环来加载 dll 文件,直到成功加载 DLL 并且在尝试之间有一个睡眠时间,但是,它无法重新加载几天,只有当我加载重新安装我的软件。
-
@TheTechel : 程序位于 C:\Program Files (x86)\software 的文件夹中
标签: c++ dll service loadlibrary