debug版exe调release版dll库的一个问题

bo96 2005-03-23 06:26:40
先建一个dll,在里面建一个导出类CMyClass
添加函数
CString CMyClass::Get()
{
CString dllstr;
dllstr.Format("hello");
return dllstr;
}

再建一个exe,调用这个dll
测试函数如下
void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CMyClass cls;
CString str;
str = cls.Get();
AfxMessageBox(str);
}
debug版exe调debug版dll库或release版exe调release版dll库结果都正常,不再讨论

用debug版exe调release版dll库时,点击button1,AfxMessageBox显示完结果后,exe程序会出异常.
debug assertion failed
file:dbgheap.c
line:1044
expression:_CrtIsValidHeapPointer(pUserData)
还有几个,不一一列出了.

但是如果将dll中的CString dllstr定义成CMyClass的类成员变量,而不在函数体中定义,就没有问题.
CMyClass::Get()函数返回的是变量值,应该会自动拷贝值,不是属于栈内存的问题.同样的写法在其它情况下也都正常.

请高手解释一下程序在这种情况下调用dll时,实际的机制是什么样的,为什么会出现这种情况.
...全文
200 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bo96 2005-04-10
  • 打赏
  • 举报
回复
我只想知道内部机制是什么,解决方法贴中本来就有了.
最后使用时当然不会这么调用,但是有时开发时只想发布一份release版的dll库.
看来不会有什么结果了,结贴了.
Wenxy1 2005-04-08
  • 打赏
  • 举报
回复
debug版本应用程序调用release版本的库肯定会出问题。
windeer 2005-04-08
  • 打赏
  • 举报
回复
你换成字符指针,可能不会有
windeer 2005-04-08
  • 打赏
  • 举报
回复
我觉得可能是CString的问题
bo96 2005-04-07
  • 打赏
  • 举报
回复
up一下,再没有明确的答案就结了.
oyljerry 2005-03-24
  • 打赏
  • 举报
回复
一般是用对应的版本,不同版本,可能一些代码的优化什么的不同,容易冲突
bo96 2005-03-24
  • 打赏
  • 举报
回复
补充一下,好像在vc6下有这个问题,在vc2003下没问题.
dzhyun,大智慧舵手,是上海大智慧股份有限公司推出新一代的行情软件,依托于大智慧云平台提供的行情服务,是一套轻、快、精的跨平台的轻客户端软件。下载体验大智慧舵手。环境准备1、开发工具在Windows中需要下载并安装VS Express 2013 for Desktop以及qt-opensource-windows-x86-msvc2013-5.7.0。如果你需要试,还需要根据你的操作系统环境下载安装wdksetup.exe。在macOS中只需要安装qt-opensource-mac-x64-clang-5.7.0即可。2、Protobuf的编译1) 在Windows系统中使用Microsoft Visual C 编译方式详见此处。发布部署部署时需要用到的相关文件均已放在Deployment文件夹中。dzhyun.ini。相关功能的配置说明[DzhYun]   yuntype=1 //1是alpha,2是beta       service=10.15.208.66 //服务器地址     isNoCompress=1 //0请求数据是压缩数据,1数据未压缩   heartTime=3 //websocket心跳时间,秒  threadCount=10 //数据处理线程个数     checkUpdateInterval=24 //检查升级间隔,小时 [WEB] webHost=10.15.208.88  //web页面相关服务地址    [DzhLog]     isOutputLogToFile=1 //是否输出日志到文件      logOutputLevel=2 //0-4 (debug,warning,critical,fatal,info)日志级别   [DzhClient]      isSoftwareOpenGL=0 //浏览器兼容配置,默认为0,有问题成1PDFViewer放的是mozilla/pdf.js这个PDF预览组件,需要和最终生成的QDzh3.exe放在相同目录中(Mac,则需要放在QDZH3.app/Contents/Resources中)。libEGL.dll、libGLESV2.dll、libGLESV2.dll这三个dll使用的是Qt5.6中带的,5.7的本会是程序在运行时有明细的黑屏情况。msvcp120.dll、msvcp120.dll为Windows系统中所需的VC 的运行。由于QtCreator在Windows中的Debug速度很慢,基本都在Release中进行开发,故将在Windows中部署单独使用脚本处理:C:\Qt\Qt5.7.0\5.7\msvc2013\bin\windeployqt.exe -qmldir C:\Qt\Qt5.7.0\5.7\msvc2013\qml QDzh3.exe由于Qt的部署工具还未完善,上述命令处理后,除了需要Deployment中需要的文件之外,还需要手动从C:\Qt\Qt5.7.0\5.7\msvc2013\qml将QtWebEngine、QtQuick、QtGraphicalEffects这三个文件复制到部署目录中(完全覆盖即可)。更多内容详见官方文档windows-deployment。macOS中部署相对简单些。首先在QtCreator的项目Release本的设置中增加自定义构建步骤,具体方法详见Qt官方文档osx-deployment,同时也需要手工复制源码下的QtGraphicalEffects、QtWebEngine至QDZH3.app/Contents/Resources/qml中。更多发布操作参见Apple官方文档App Distribution Quick Start。  标签:dzhyun

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧