无法加载库 *.dll 未知错误 0x000000c1
Cannot load library *.dll Unknown error 0x000000c1
我尝试使用 QLibrary 从 qt 项目中调用 controller.dll,但出现 returns 这样的错误。
无法加载库 E:\"absolute path to the dll"\controller.dll: 未知错误 0x000000c1。
这是什么意思?
QLibrary lib;
lib.setFileName("E:\absolute path to the dll\controller.dll");
if(lib.load()) {
qDebug()<<"Loaded";
} else {
qDebug()<<"Not loaded";
qDebug()<<lib.errorString();
}
error list you need is here。该错误的符号名称是 ERROR_BAD_EXE_FORMAT
,错误消息是 <filesoandso> is not a valid Win32 application.
您尝试打开的 DLL 已损坏,或者 - 很可能 - 它用于不同的架构。如果您正在为 32 位编译,请使用 32 位 DLL。如果您正在为 64 位编译,请使用 64 位 DLL。
您的系统上很可能同时具有 32 位和 64 位编译器。如果您使用 Qt Creator,切换应该很容易 - 只需 select 个不同的工具包。下面的截图中没有显示64位的工具包,但是如果你在安装Qt的时候已经安装了它们,你应该有它们。
为什么错误名为 "bad EXE" 而不是 "bad DLL"?因为在 Windows 上,这两个文件具有相同的 PE(可移植可执行文件)格式,并且只有文件中存在启动信息才能将 PE 文件转换为可以自行启动的可执行文件。 EXE 可以做 DLL 可以做的一切,包括导出符号:)
顺便说一句:使用单正斜杠。 Qt 在内部使用正斜杠作为路径分隔符。这样它就可以很容易地保持跨平台。它在需要与 OS.
交互时翻译它们
我尝试使用 QLibrary 从 qt 项目中调用 controller.dll,但出现 returns 这样的错误。 无法加载库 E:\"absolute path to the dll"\controller.dll: 未知错误 0x000000c1。 这是什么意思?
QLibrary lib;
lib.setFileName("E:\absolute path to the dll\controller.dll");
if(lib.load()) {
qDebug()<<"Loaded";
} else {
qDebug()<<"Not loaded";
qDebug()<<lib.errorString();
}
error list you need is here。该错误的符号名称是 ERROR_BAD_EXE_FORMAT
,错误消息是 <filesoandso> is not a valid Win32 application.
您尝试打开的 DLL 已损坏,或者 - 很可能 - 它用于不同的架构。如果您正在为 32 位编译,请使用 32 位 DLL。如果您正在为 64 位编译,请使用 64 位 DLL。
您的系统上很可能同时具有 32 位和 64 位编译器。如果您使用 Qt Creator,切换应该很容易 - 只需 select 个不同的工具包。下面的截图中没有显示64位的工具包,但是如果你在安装Qt的时候已经安装了它们,你应该有它们。
为什么错误名为 "bad EXE" 而不是 "bad DLL"?因为在 Windows 上,这两个文件具有相同的 PE(可移植可执行文件)格式,并且只有文件中存在启动信息才能将 PE 文件转换为可以自行启动的可执行文件。 EXE 可以做 DLL 可以做的一切,包括导出符号:)
顺便说一句:使用单正斜杠。 Qt 在内部使用正斜杠作为路径分隔符。这样它就可以很容易地保持跨平台。它在需要与 OS.
交互时翻译它们