由于QT是64位 debug 后来怀疑是不是dll的位数不对
使用dumbin.exe查看 该dll 确实是 64位, DLL的位数确实没问题。
尝试5:后来使用QT自带的加载库## 标题QLibrary module(“F://workspace//zhant//bin//zhant_d.dll”);
bool bret = false;
bret = module.load();
qDebug()<<module.errorString();
发现bret为false ,输出错误信息,
module.errorString()输出信息为:
Cannot load library F://workspace//zhant//bin//zhant_d.dll: Unknown error 0x000000c1
最后上网上搜索
http://www.chilkatforum.com/questions/1590/regsvr32-loadlibrary-failed-getlasterror-returns-0x000000c1
QLibrary的load失败(0x000000c1) - castor_xu - 博客园 (cnblogs.com)
看到这篇博客,想调用release的dll
将load时路径改为release的dll后,发现 LoadLibrary的句柄不为空了,而且 自带的库load 也成功了。
QT 64位的debug 能调用 64位的debugDLL, 也能调用64位的release模式的dll。 (如果想调用32位的dll要整的很麻烦。参考这个:
64位进程调用32位DLL详解_聂炳玉的博客-CSDN博客_64位程序调用32位dll)
debug版本带运行时问题,release版本不带运行时问题
QT 将 dll 加载成功后,运行了两个函数后,调用真正的算法时发现异常。
最后发现是opencv的版本问题。
QT msvc2017 X64 、 opencv2.4.13 的版本
但算法的dll是vs2010 x64 opencv2.4.3的版本
opencv2.4.3最高支持vs2010, 不支持2017,所以
要将算法的opencv改为2.4.13
同时,后期要将vs2010改为2017版本比较好。
在调试时可用GetLastError() 或者 module.errorString() 输出异常信息
GetLastError()返回值列表_coder i++的博客-CSDN博客_getlasterror
https://blog.csdn.net/weixin_53370274/article/details/123307522