前言
用vs加载dll库是没有问题,移植到qt creator开发却加载失败。
#include <QLibrary>
void LoadDll()
{
QString appPath = QCoreApplication::applicationDirPath();
QString strLibFile = appPath + "/Pay.dll";
QLibrary *m_pLib= nullptr;
if (QFile::exists(strLibFile))
m_pLib = new QLibrary(strLibFile);
else
qDebug() << strLibFile + " isn't exists!";
if(!m_pLib->load())
qDebug() << "load fail:" + m_pLib->errorString();
else
qDebug() << strLibFile + " load success";
}
运行时候报错:
反思:其实代码没啥问题,vs项目也是正常使用的,后面,发现这个动态库是32位的,这个项目是64位的。最终把项目换成32位就成功了。
总结:
因为一开始编译的dll是32位,但是64位进程直接调用32位DLL是会失败的,所以加载不成功,反过来,32位的进程去调用64位的DLL一样会失败,只有都统一起来以后才没问题了。
在没有dll源码的情况下,没法重新编译,这个时候就需要突破32位和64位之间调用的问题了,关于这个问题,可以参考这个: