在64位win7系统visual2010里怎么运行之前在32位系统里同版本的程序一直出现问题?

halluo 2014-08-10 03:17:37
我之前在32位系统里生成时完全没有一点问题的。但是换了台电脑,在64位系统里生成的时候没问题。但是一调试就出现以下问题。
我从mfc程序的起始地方开始调试,结果发现在这一步之后开始出现问题。
我查看调用堆栈,到最后面也没有我自己写的代码。
之后的中断地方为:

求助各位大神啊,到底是因为什么?
...全文
228 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿呆_ 2014-08-13
  • 打赏
  • 举报
回复
SetWindowsHookEx()设置的全局hook实际上是在操作系统的消息传递处理链表中注册了一番,Windows每产生一个消息都会在hook链表中过一遍。因此不管目的地是32位还是64位,hook链表中注册的过程(不管是32位还是64位)都会收一遍。对于例如message hook,它会在相应目的进程的运行空间内调用hook proc(hook dll被自动加载到相应进程中,比如32位进程自动加载32位hook dll, 64位进程自动加载64位dll), 对于不能在目标进程空间运行的hook proc,它会在注册hook的相应线程中执行,比如将32位目标代码的消息传递给调用SetWindowsHookEx()注册hook的64位线程中运行的64位hook proc,或者相反。对于比如键盘/鼠标等hook,它只会运行于调用SetWindowsHookEx()线程中的hook proc,也就是说,对这类hook它并不会加载进每个单独的进程,而是运行于注册hook的进程中。
fang 2014-08-12
  • 打赏
  • 举报
回复
引用 楼主 peggymu 的回复:
我之前在32位系统里生成时完全没有一点问题的。但是换了台电脑,在64位系统里生成的时候没问题。但是一调试就出现以下问题。 我从mfc程序的起始地方开始调试,结果发现在这一步之后开始出现问题。 我查看调用堆栈,到最后面也没有我自己写的代码。 之后的中断地方为: 求助各位大神啊,到底是因为什么?
是不是调用的DLL(包括自己生成的DLL)有32位的,
阿呆_ 2014-08-10
  • 打赏
  • 举报
回复
你不会用了SetWindowsHookEx()设置了全局hook吧?需要注意的是也许你的64位hook proc也会接受32位程序的事件哦,只不过不是运行于32位程序的地址空间,而是你64位程序中调用过SetWindowsHookEx()的那个线程,而且你64位的线程中必须使用消息循环,不然32位程序会运行不正常甚至冻结整个desktop。 而且我看你贴出的部分代码中似乎修改了被hook程序的window proc?,那么你可以想象你把32位进程窗口的window proc改成64位的代码(而且不在对方进程空间)会有什么结果。
halluo 2014-08-10
  • 打赏
  • 举报
回复
但是这个程序在另外一台32位系统里运行的是一点问题都没有的…
zhuyf87 2014-08-10
  • 打赏
  • 举报
回复
我有两台工作电脑,一台是64bit Win7,一台是32bit Win7,同一个项目在两台机器上都在开发,没有遇到问题。 dlg.DoModal()会导致你Dialog的OnInitDialog等函数的执行吧,是否是程序中到的一些dll有问题。

15,471

社区成员

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

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