目前,我正在使用LoadLibrary函数加载我的xxx.dll文件(xxx.dll是我的私有dll文件)。它工作正常,但有时它无法加载带有错误代码126的库。
MyDll = LoadLibrary(DllPath.c_str());
DllPath
(类型为std::wstring
)是我的dll文件的路径。
我研究了错误,这意味着"无法找到模块" ,但我检查了目录是否正确,dll文件是否仍然存在。
我的dll文件是32位dll,操作系统是Windows 64位,启动服务时加载了dll文件。
很少发生,目前我无法重现此错误。 但是,每当错误发生时,它总是无法加载dll文件,只有一种方法可以解决这个问题,即删除并重新安装软件。
有谁知道这个问题的可能原因是什么?
感谢任何帮助!
答案 0 :(得分:0)
我曾经用私有DLL遇到过这个问题;我有一个针对私有DLL执行LoadLibrary
的测试程序,但出现错误126。我对其进行了研究,并能够修复该错误:
出现这种情况是因为针对DLL的依赖项进行了静态与动态链接。更具体地说,私有DLL取决于OpenCV,并链接到以下文件:
zlib.lib
,ippicvmt.lib
,ippiw.lib
,ade.lib
,opencv_core410.lib
,opencv_imgcodecs410.lib
,opencv_imgproc410.lib
,ittnotify.lib
,IlmImf.lib
,libjasper.lib
,libjpeg-turbo.lib
,libpng.lib
,libprotobuf.lib
,libtiff.lib
,libwebp.lib
,quirc.lib
>
这些OpenCV库文件可以以“静态”模式或“动态”模式构建。当这些文件在“动态”模式下构建时,专用DLL的LoadLibrary
给出错误126。当在“静态”模式下构建OpenCV时,所有OpenCV例程将成为专用DLL的一部分,专用DLL变为更大(28 MB和41 MB),并且可以通过一次LoadLibrary调用正确加载私有DLL。
其他一些发现: