• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 让俺崩溃的CString

让俺崩溃的CString

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了cstring,cstring转char,cstring转int,cstring头文件,cstring转string等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 让俺崩溃的CString
描述:


是酱紫的:
我的一个com组件里有一个类A,A包含了一个类B的对象b,用来实现一些功能,类A,B的.h, .cpp文件都在com组件里。 
其中A有一个成员函数如下:
int A::Set(CString strName)
{
    m_b.Set(strName);
    return 0;
}
B中,有一个成员函数:
int B::Set(CString strName)
{
    m_strName = strName;
}
其中m_strName是B的一个成员变量
如上,一切工作正常!
但是,由于俺个人人力无法抗拒的原因,现在要把B抽出来,以一个MFC扩展dll导出类的形式来使用B(我承认这完全是吃饱了撑得,人力不可抗啊……),如下是导出类头文件的形式
//B.h
...
class AFX_EXT_CLASS B
{
........
........
}
...
//B.cpp略
然后在A中定义一个B的对象,进行使用(当然该使用的B的.h, lib文件, dll文件都设好了)
现在问题来了
当我接连两次调用A::Set(...)的时候,第一次正常,第二次时就会异常,我调试跟踪,发现是在B的Set()中
m_strName = strName;
时,似乎是m_strName要首先释放之前的空间,释放的时候出的异常;
但是如果是如下形式给m_strName赋值,就不会发生问题
char* p = char[100];  // 100 仅示意
//然后将strName的内容copy到p空间中,接着
m_strName = p;
这样不会出任何问题
我还试过在B:Set(...)中使用如下的代码
{
    CString strTemp = _T("test");
    m_strName = strTemp; // 同样的第二次调用时异常
}
及
{
    m_strTemp = _T(" test");  // 怎么调用都正常
}
此外,还有另一种情形也会出同样的异常,我在dll的B的一个成员函数里new 了一个CString strName,将strName的指针传给A,在A中释放:delete (CString*)lparam,同样的异常会出现……
以上只是一个简化,实际情形复杂的多,但是由于XXX的因素, 无法把代码贴出来……
我也曾以最简单的形式,以MFC扩展dll导出类的形式建立工程,实现如上的Set功能,只是为了看连续两次Set是否会出异常,但是一切正常,俺彻底晕菜啦……和几个人整了一天也不清楚为什么……
说了这么多,恐怕还是没叙述清楚,俺只想知道这是为虾米啊,是否有大侠遇到过类似情形,俺欲哭无泪啊……


解决方案1:

不要尝试传递CString
它不是一个基本的win32数据类型,而是MFC中一个类.
不同模块中传递字符串,使用最基本的 char* 或者 w_char*

解决方案2:

写的真复杂,是不是理理思路再写啊,看的眼晕~

解决方案3:

跨模块传递字符串要用基本类型或者bstr,不要用类,不然你会哭的很惨的。

解决方案4:

对,跨模块传字符串用BSTR

解决方案5:

为什么不考虑使用BSTR?

解决方案6:

http://msdn2.microsoft.com/en-us/library/ms174286(VS.80).aspx

解决方案7:

查查以前的帖子

解决方案8:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_MFCNOTES_TN058.asp


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • vc导入外部头文件问题
  • BSTR----字符串,紧急求救!!!!再现等待,马上给分!!!!
  • 关于SysAllocString和内存泄露的问题
  • LPCSTR_bstr_tvar的类型问题
  • 有关bstr的问题
  • 关于BSTR和CString问题
  • 关于Bstr和ComBstr的相关内容
  • CStringA转BSTR的问题
  • ATL::CString在dll中使用问题
  • 两个BSTR是用什么函数比较是否一致的?

相关文章

  • 2017-06-05 恳请C++高手指教!!!!!本人愿用自已开发的一套价值8百多的组件交换!!!!
  • 2017-06-04 关于FLASH播放动画的问题
  • 2017-06-04 [请教]VC创建的WIN32工程有什么方法可以调用ActiveX写的控件
  • 2017-06-05 vs2008访问excel2007实现求值。
  • 2017-06-04 在ATL开发中,只加入了一个简单接口,我想得到一个可操作的窗口句柄?在线等待!
  • 2017-06-04 为什么不能调用ActiveX控件的接口中的方法
  • 2017-06-04 客户端ActiveX与数据绑定问题
  • 2017-06-05 本人想利用PostMessage在不同的进程之间传递数据?
  • 2017-06-04 怎样调用自定义控件的事件
  • 2017-06-04 atl中能不能使用odbc???????????????

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Windowsfirefox数字证书导入(pfx)
    • 我想把bmp图像放在dll中,然后再用程序调用,如何做呢?请高手指点
    • 请问OpenCV2中把轮廓作为输入,怎么检测轮廓的角点以及个数
    • OLEDBATL模板类调用带返回值和游标的oracle存储过程
    • InternetExplorerServer无容器实现异形
    • 是关于IHTMLDocument2的问题
    • 怎样屏蔽掉MFC-DLL工程中的接口类里面的私有函数?
    • CoCreateInstance是否只能用户获得COM组件的第一个接口,其他的接口都必须QueryInterface得到?
    • ShellExecute启动一个程序后怎么能直接得到这个程序窗口的句柄?
    • COM的初级问题?这个概念是否和线程模型有关?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有