复制数据到内存的异常。急~~,在线等。。。。

wen9010 2006-07-25 05:22:26
定义了一个公共变量:
struct MyFormatData
{
CString idval;
CString cszCurrentPath;
CString cszLocalpath;
};

然后赋值:
MyFormatData mydata;
CTime time;
time=CTime::GetCurrentTime(); //获得当前时间
mydata.idval=time.Format("%d%H%M%S" ); //将日,时,分,秒转换为字符串
mydata.cszLocalpath="";
mydata.cszCurrentPath=szFtpDirectory;

想将这个数据保存到内存中:
HGLOBAL clipbuffer;
clipbuffer = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE | GMEM_ZEROINIT | GMEM_DISCARDABLE, sizeof(MyFormatData));
MyFormatData * buffer = (MyFormatData*)GlobalLock(clipbuffer);
*buffer = mydata; //保存到内存
GlobalUnlock(clipbuffer);

编译没有问题:不知道为啥在执行到*buffer = mydata;时抛出异常,在MFC的
struct CStringData中的:
bool IsLocked() const throw()
{
return nRefs < 0;
}
被中断。求救,谢谢!!
...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Practise_Think 2006-07-25
  • 打赏
  • 举报
回复
正是拷贝出错的,这个COPY不是简单的内存覆盖,而是调用了MyFormatData::operator=(),而这个操作符的实现已由编译器代劳了,所以会给别人一个简单COPY的假象,

编译器为你做的代码大概是这样的:
MyFormatData::operator=(const MyFormatData& data)
{
idval = data.idval ; // 这里又调用了idval.CString::operator=(),因此在COPY前idval应是已初始化的CString对象
...
}
wen9010 2006-07-25
  • 打赏
  • 举报
回复
Practise_Think(时代“过客”) ;我是要把数据拷贝到内存中,不是新建一个结构,然后复制呀。
Practise_Think 2006-07-25
  • 打赏
  • 举报
回复
MyFormatData * buffer = (MyFormatData*)GlobalLock(clipbuffer);
改为:
MyFormatData * buffer = new MyFormatData ;

因为MyFormatData 内的数据不是简单结构,而你的代码只分配了内存但没对这段内存初始化,也就是CString的构造函数没被调用
gao_ming77 2006-07-25
  • 打赏
  • 举报
回复
建议对你的struct进行序列化成二进制数据再拷贝到Global buffer上,
从Global buffer上取数据一样通过反序列化。

bobob 2006-07-25
  • 打赏
  • 举报
回复
CString 跨进程传递是不行滴
wen9010 2006-07-25
  • 打赏
  • 举报
回复
请教应该重写成什么样?
DentistryDoctor 2006-07-25
  • 打赏
  • 举报
回复
需要为MyFormatData重写operator=和copy constructor,以实现deep copy.

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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