郁闷 mfc90d.dll!CTreeCtrl::DeleteAllItems()报内存访问冲突

czb 2015-10-25 10:34:20
vc2008的编译器,原来代码在32位操作系统上运行,一切正常。移植到64位的win7上,编译为64位的EXE文件,结果运行的时候,MFC自身的CTreeCtrl都有问题了。

DEBUG报错文件为afxcmn.inl(vc自带的文件),报错行的内容为
_AFXCMN_INLINE BOOL CTreeCtrl::DeleteAllItems()
{ ASSERT(::IsWindow(m_hWnd)); return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT); }

报错内容为
MultiParentTree.exe 中的 0x3f9a6b40 处未处理的异常: 0xC0000005: 在位置 0x000000003f9a6b40 发生访问冲突

此时的堆栈为
000000003f9a6b40()
user32.dll!0000000076679bd1()
[下面的框架可能不正确和/或缺失,没有为 user32.dll 加载符号]
user32.dll!0000000076676aa8()
user32.dll!000000007666d398()
>mfc90d.dll!CTreeCtrl::DeleteAllItems() 行273 + 0x52 字节 C++
MultiParentTree.exe!CNodeDialog::PopulateCombo() 行157 + 0xa 字节 C++

请各位老鸟指教。
顺便感叹下CSDN的论坛,做得也够烂的。
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shao99 2015-10-26
  • 打赏
  • 举报
回复
好像就是对windows下的那些dll,ocx重新regsvr32一次,可能可以解决问题
czb 2015-10-26
  • 打赏
  • 举报
回复
感谢楼上的各位专家,问题终于解决了,解决方案如下。 http://blog.csdn.net/noodle123/article/details/6749381 2、32位变为64位编程后: SetWindowLong的地方改为SetWindowLongPtr DWORD xxx=(DWORD)ptr;的地方改为LONG_PTR xxx=(LONG_PTR)ptr;
oyljerry 2015-10-26
  • 打赏
  • 举报
回复
这个先看看能不能给编译器打一下补丁等,然后再重新编译。

15,979

社区成员

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

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