自查步骤
1. dll内部问题
动态库dll中可能也调用了一些外部动态链接库。
比如在qt4上生成的动态库可能会使用到qt4的动态库如:qtsql4,如果只把生成的动态库放到.exe的路径下会发现,程序运行时,会发现打开这个dll,用QLibrary的errorString()函数会发现输出
Cannot load library XXXXXX.dll: 找不到指定的模块。
这种情况下可使用,depends(Dependency Walker)查看dll,若内部缺少了依赖库,则会显示如下
此处少了QTCORE4.DLL库,只要把QTCORE4.DLL库放到调用的dll同个目录下在调用即可正常使用
2. dll库生成的位数或方式不同
若dll库是在64位的qt中生成的,则32位的qt无法调用此依赖库。同理,如果dll库是以debug的方式生成的,则无法在release项目中使用。
解决方法:对应生成与调用即可
3. mingw与vs的区别
mingw使用直接调用DLL的方法,即使用头文件,dll,lib三个文件调用库的方法,会出现错误。
这种情况下可直接使用QLibrary调用动态库;注意,需要将dll放到.exe的目录下,否则无法找到dll
int main(int argc, char *argv[])
{
QLibrary mylib("XXXX.dll");
qDebug()<<mylib.load();
qDebug()<<mylib.errorString();
}
…后续遇到其他dll调用问题继续更新