Qt调用dll时出现无法调用的情况,自查步骤(重)

自查步骤

1. dll内部问题
动态库dll中可能也调用了一些外部动态链接库。
比如在qt4上生成的动态库可能会使用到qt4的动态库如:qtsql4,如果只把生成的动态库放到.exe的路径下会发现,程序运行时,会发现打开这个dll,用QLibrary的errorString()函数会发现输出

Cannot load library XXXXXX.dll: 找不到指定的模块。

这种情况下可使用,depends(Dependency Walker)查看dll,若内部缺少了依赖库,则会显示如下
Qt调用dll时出现无法调用的情况,自查步骤(重)_第1张图片
此处少了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调用问题继续更新

你可能感兴趣的:(qt,开发语言)