【发布时间】:2016-05-09 17:59:24
【问题描述】:
我在为一个类项目编写代码的 Windows 控制台应用程序中加载 DLL 时遇到了一些麻烦。我不知道为什么它不加载库文件。
在我调用有错误的 LoadLibrary 之前,我在 main 之前定义了这个:
#include "lomo2.h"
和
HINSTANCE cargaDLL;
我也试过把 HINSTANCE 改成 HMODULE 类型,但是没用。
在 main 之后,我尝试导入位于 main: 中的 DLL:
cargaDLL = LoadLibrary("C:\\lomo2.dll");
if (cargaDLL == NULL){
PERROR ("Error en la carga de la libreria\n");
Sleep(2000);
exit (1);
}
当我调用 LoadLibrary 时,我也尝试使用像“LoadLibrary(.\my dll directory\lomo2.dll)”这样的相对路径,但它根本不起作用。
结果是显示链接库时出错的消息,在 PERROR 中。
用GetLastError()检查错误,它说找不到指定的模块。
希望你能帮我解决这个问题。 谢谢。
【问题讨论】:
-
调用 LoadLibrary 并指定相对路径时,请记住,在 Visual Studio 中,工作目录默认为项目目录。我猜你希望它是目标目录 (${TargetDir})。
-
是时候检查
GetLastError()了。 Windows 会告诉你问题所在。 -
开启加载器快照。
lomo2.dll可能依赖于另一个 DLL,而另一个 DLL 缺失。 -
试试这个工具 dependencywalker.com 看看到底缺少什么
-
要启用加载程序快照,请打开“开始”菜单并键入 gflags。如果您同时提供 x86 和 x64,请选择适当的位数。 显示加载程序快照选项位于系统注册表选项卡上。 @Exceptionon:Dependency Walker 几乎已经死了。它已经多年没有更新了,而且失败的次数多于帮助的次数。周围有更好的工具(例如 DUMPBIN)。
标签: c++ c windows dll loadlibrary