郁闷 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的论坛,做得也够烂的。
...全文
118 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过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
这个先看看能不能给编译器打一下补丁等,然后再重新编译。
回复
发动态
发帖子
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
社区公告
暂无公告