各位大哥,今天的错误不知道怎么来的,因为我敢保证昨天没有,先看看错误。(XP,VS2008,SP1,MDI程式)
第一张图:上面显示的是断点的位置,这里出错了,下部分是局部变量的值,其中的lpszFileName所指向的目录,是绝对不存在的。第二张图:这是我的给我的登录框发送消息时,第一个参数的状态,注意看m_hWnd的值是问号,但我依然收得到消息我的登录框是DOMADEL的,在OnInitDialog中把this指针赋给了m_Login。程序每次登录都会报第一图所示的这个错误,但却不是在某一固定的语句执行后,可能在前,或者在后,总之就是报这个错了,折腾了很久,已经没办法解决了,只有来求助,请各位大哥帮忙分析一下原因吗?
第一张图:上面显示的是断点的位置,这里出错了,下部分是局部变量的值,其中的lpszFileName所指向的目录,是绝对不存在的。第二张图:这是我的给我的登录框发送消息时,第一个参数的状态,注意看m_hWnd的值是问号,但我依然收得到消息我的登录框是DOMADEL的,在OnInitDialog中把this指针赋给了m_Login。程序每次登录都会报第一图所示的这个错误,但却不是在某一固定的语句执行后,可能在前,或者在后,总之就是报这个错了,折腾了很久,已经没办法解决了,只有来求助,请各位大哥帮忙分析一下原因吗?
解决方案 »
- VS2008 编译问题
- 我的可用分数太少了
- 星星就是比五个三角好看,散分庆祝升星星!
- 请求各位大虾介绍几本学习vc进程/线程的书??
- 如何使一个变量的值改变时触发一个消息?谢谢
- 谁有提取密码框中***字符串的代码?(急等)
- 有没有搞过smart card开发的兄弟?100分求COS参考手册!随便哪个公司的都行!
- 函數AnsiString(): Data(0) {Data=new char[2];Data[0]=Data[1]=0;}什么意思?
- 大家给推荐windows程序,sdk编程的入门好书(不是MFC的)言者有分
- 欢迎各位高手参加项目方案讨论?
- 从CTIME到datetime的标准格式转换???
- Codejock Software Xtreme ToolkitPro类大多继承自CCmdTarget的原因
[user32.dll!77d187eb()],点此条显示没有可用的代码.
【下面的框架可能不正确和/或缺失,没有为user32.dll加载符号】
【user32.dll!77d8709()】,点此条依然显示没有可用的代码
【mfc90d.dll!AfxWndProcBase(HWND_............】,点此处有代码了,接着向下
直到
【mfc90d.dll!AfxAssertValidObject(........)】就出现了第一幅图的情况!该怎么找呢,各位?
但中断处在第一图那里,而提示的内容偏偏是lpszFileName所指向的目录文件,行号
但我觉对没有这个目录和文件的,这是怎么回事?
偶是很想来解决这种问题的,不过,偶不在现场啊,偶只能帮你猜猜问题在哪里了,
1.调用 SendMessage 的线程是不是主线程?我怀疑应该不是主线程。
2.调用 SendMessage 的时机?你不会是在 CXXXApp的构造函数里调用的吧?
我上面的回答就是去找运行出这种状态的原因。
我可以肯定的是 lpszFileName 是 MFC 一个函数里的定义,不是你定义的,MFC 的代码运行了这么多年,我觉得出现这种 bug 的可能性不大,
求教怎么拷贝结构体的数据呢?我的做法如下://接收四个结构体数据,分别为One,Two,Three,Four表示,传过来的都是指针;
//我在我的类中再定义一个结构体来存储
//定义:
//Struct MyStruct
//{
// One *MyOne;
// Two *MyTwo;
// Three *MyThree;
// Four *MyFour;
//}
//拷贝
memcpy(&MyStruct->MyOne,&One,sizeof(One));
memcpy(&MyStruct->MyTwo,&Two,sizeof(two));
...
//拷贝完成后,可以看得到数据,但继续运行,就可以看到这个数据丢失了。结构体该怎样来拷贝?
这个拷贝怎么看上去怪怪的,指针拷贝避免出现指针悬挂,你这拷贝后2个结构体的指针指向同一份数据,最好拷贝数据而不是指针的值
-----------------------------
你调试下就知道了,memcpy这个API有什么用。怎么用最好查下MSDN那么如果不重载operation =,如何复制一份数据到我定义的结构里面呢?
-----------------------------------------------------
如果你这个结构体成员都是数组,可以直接赋值,但有指针,而且又没有重载operation=,那么只有逐个成员复制了。举个例子加入One类型是char,A是有值的MyStruct变量,定义MyStruct B,把A赋值给B
int nLength = strlen(A.MyOne)+1;
B.MyOne = new char[nLength ];
memset(B.MyOne ,0,nLength );
memcpy(B.MyOne,A.MyOne,strlen(A.MyOne) );
这只是举个例子,如果是char*,可以直接用strcpy_s复制字符串,如果是其他类型的计算好缓冲区长度,memcpy之.
谢谢dahaiIO!
原来这个这么复杂,以为很简单的,结构体我还得研究一下