一个键盘钩子hook.dll和一个调用它的对话框主程序main.exe,使用传递函数指针的方法在安装钩子时将main.exe中的一个函数fun()指针传递到hook.dll中,并保存。
当main.exe在前台时,hook.dll可以正常执行main.exe中的fun()函数,但是,当main.exe在后台时,也就是不是当前窗口时,hook.dll中就不能调用fun()函数,出现dll中的fun()函数指针无效的问题。请问如何解决?
当main.exe在前台时,hook.dll可以正常执行main.exe中的fun()函数,但是,当main.exe在后台时,也就是不是当前窗口时,hook.dll中就不能调用fun()函数,出现dll中的fun()函数指针无效的问题。请问如何解决?
DLL会被加载到进程空间,而EXE则不会,所以当前进程不是MAIN.EXE时,FUN函数的指向将是一个非法地址。
回复人: lonely001(独行客) ( ) 信誉:100 2005-03-27 09:36:00 得分: 0
办法就是把函数做到DLL中。
DLL会被加载到进程空间,而EXE则不会,所以当前进程不是MAIN.EXE时,FUN函数的指向将是一个非法地址。
我也认为可能是这个原因,难道就没有办法得到原主程序中的FUN()函数地址吗?钩子DLL和原主程序之间到底是怎样的一种关系?普通DLL和钩子DLL和主程序的关系应该是不一样的。
常规的办法是不可能让.EXE中的函数可以让其他程序正常调用的,除非你把你的.EXE加载到系统空间:)不过,楼主也说了,只是想把处理过程放在.EXE中而已,这样就简单很多了嘛。
首先,DLL只负责从各个进程中取得所要的数据,然后通过进程间通信的方法将这些数据发给.EXE,在你的主程序种集中处理,就OK了啊:)至于进程间通信的办法有很多,比如共享内存、内存映射、WM_COPYDATA等等。