无法加载库* .dll未知错误0x000000c1

时间:2020-04-07 13:12:42

标签: c++ qt dll window

我尝试使用QLibrary从qt项目调用controller.dll,但它返回此类错误。 无法加载库E:\“ 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();
}

1 个答案:

答案 0 :(得分:4)

error list you need is here。该错误的符号名称为ERROR_BAD_EXE_FORMAT,错误消息为<filesoandso> is not a valid Win32 application.您要打开的DLL已损坏,或者-很可能-它用于不同的体系结构< / strong>。如果要编译32位,请使用32位DLL。如果要编译64位,请使用64位DLL。

您很有可能在系统上同时使用32位和64位编译器。如果您使用Qt Creator,则切换起来应该很容易-只需选择其他套件即可。下面的屏幕快照中没有显示64位工具包,但是如果您在安装Qt时安装了它们,则应该安装它们。

A screenshot from Qt Creator, displaying the Project pane in lower left corner of the application.

为什么将错误称为“错误的EXE”而不是“错误的DLL”?因为在Windows上,两个文件都具有相同的PE(便携式可执行文件)格式,并且文件中只有启动信息,才能将PE文件转换为可以单独启动的可执行文件。 EXE可以执行DLL可以执行的所有操作,包括导出符号:)

顺便说一句:使用单斜杠。 Qt内部使用正斜杠作为路径定界符。这样,它可以轻松地保持跨平台。在需要与操作系统交互时会翻译它们。