我尝试使用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();
}
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,则切换起来应该很容易-只需选择其他套件即可。下面的屏幕快照中没有显示64位工具包,但是如果您在安装Qt时安装了它们,则应该安装它们。
为什么将错误称为“错误的EXE”而不是“错误的DLL”?因为在Windows上,两个文件的PE(Portable Executable)格式相同,并且文件中只有启动信息,PE文件才变成可以自行启动的可执行文件。 EXE可以执行DLL可以执行的所有操作,包括导出符号:)
顺便说一句:使用单斜杠。 Qt内部使用正斜杠作为路径定界符。这样,它可以轻松地保持跨平台。当需要与操作系统接口时,它将翻译它们。