首页| 论坛| 消息

标题:QT调用第三方DLL,debug模式正常,release模式崩溃
作者:dafei2015
日期:2020-04-03 21:20
内容:

问题描述: 调用第三方USB通讯的DLL,debug模式各项功能正常,release模式DLL调用崩溃。
1.可以确定DLL路径正常,采用QLibary显示调用,
2.检查了所有变量都初始化了
函数原型 ushort SI_GetNumDevices(LPDWORD lpdwNumDevices);
我的代码: DWORD x = 0 ;
typedefquint16(*Func)(LPDWORD); Func open = (Func)SI_DLL.resolve("SI_GetNumDevices");open(&x);哪位大佬帮忙分析下可能的原因,谢谢!


#1 [liulin188 04-03 21:41]
我也遇到过这个问题,换个Qt版本吧
#2 [dafei2015 04-03 21:46]
我是QT 5.8 换哪个版本呢?
#3 [20091001753 04-03 23:15]
要换就换最新的。
QT 5.14.2
试试
#4 [圣域天子 04-04 18:04]
说我常见的原因,但未必确保你也是这个原因:
Debug模式下,VC编译器对内存有保护,有时重复删除内存不会引起崩溃。
但Release模式下,就没有保护了,会容易出现崩溃。
对于第三方DLL常见于 delete, 或 renew或reset之类的操作。
有常见于对象是初始化后传给DLL的,还是由DLL自己new的。
建议你可以先从屏蔽掉delete代码着手调试。
我的习惯是开发阶段默认直接用 release 模式编译的,除非一定要进行debug调试,才再用debug编译。因为debug下OK的程序在release下出现异常已碰到过无数次了~~~
#5 回 圣域天子 的帖子 [dafei2015 04-05 20:11]
圣域天子:说我常见的原因,但未必确保你也是这个原因:
Debug模式下,VC编译器对内存有保护,有时重复删除内存不会引起崩溃。
但Release模式下,就没有保护了,会容易出现崩溃。
对于第三方DLL常见于 delete, 或 renew或reset之类的操作。
有常见于对象是初始化后传给DLL的,还是由DLL自己n .. (2020-04-04 18:04) 
好的谢谢提供思路!

<< 1 2 >> (1/2)

回复 发表
主题 版块