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

kar*_*k98 3 c++ dll qt 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();
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

您需要的错误列表在这里。该错误的符号名称是ERROR_BAD_EXE_FORMAT,错误消息是<filesoandso> is not a valid Win32 application.The DLL you're attempts to open is Corrupt, 或者 - 最有可能 -它适用于不同的体系结构。如果您要针对 32 位进行编译,请使用 32 位 DLL。如果您要针对 64 位进行编译,请使用 64 位 DLL。

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

Qt Creator 的屏幕截图,在应用程序的左下角显示“项目”窗格。

为什么错误被称为“坏 EXE”而不是“坏 DLL”?因为在 Windows 上,这两个文件具有相同的 PE(可移植可执行文件)格式,并且只有文件中存在启动信息才能将 PE 文件转换为可以自行启动的可执行文件。EXE 可以完成 DLL 可以做的所有事情,包括导出符号:)

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