【发布时间】:2016-07-25 08:28:05
【问题描述】:
我的 C++ 程序调用 LoadLibraryEx() 来加载第三方 DLL。结果是一个空句柄 - 它无法加载。之后对GetLastError() 的调用返回零,这并没有多大用处,但至少它不是丢失的 DLL 文件。
代码如下:
HINSTANCE instance = ::LoadLibraryExW(
path, 0, LOAD_WITH_ALTERED_SEARCH_PATH );
if (instance == 0)
{
DWORD lastError = GetLastError();
LOG( "Failed to load, error code is " +
LastErrorAsString( lastError ));
return E_FAIL;
}
我无法访问那台机器 - 我只能在那里部署代码并观察上传到网络存储的日志。
如何以编程方式找出 DLL 加载失败的原因?
【问题讨论】:
-
您在检查
NULL句柄后是否直接 调用GetLastError?你没有在两者之间调用任何其他函数? -
能否请您分享代码而不是引用您正在使用的功能。它将帮助我们尝试为您找出问题。
-
@JonathonOgden 添加了一个 sn-p
-
@JoachimPileborg 是的,这是我检查的第一件事。
-
来自 MSDN:如果使用此值并且 lpFileName 指定了绝对路径,系统将使用备注部分中讨论的备用文件搜索策略来查找指定模块导致加载的关联可执行模块。如果使用此值并且 lpFileName 指定相对路径,则行为未定义。你确定使用的是绝对路径吗?
标签: c++ winapi visual-c++ dll loadlibrary