《WINDOWS 核心编程》第22章 519页。请高手指导我这坨屎 能不能帮我看一下这一句话,怎么用程序实现:GetMsgProc B=hinstDll B + (GetMsgProc A - hinstDll A)在电子版《WINDOWS 核心编程》第22章 519页。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LPVOID pfnA = GetProcAddress(hDllA, "GetMsgProc);LPVOID pfnB = hDllB + pfnA - hDllA; 在电子版《WINDOWS 核心编程》第22章 519页。书上是这样讲的:5) 当DLL的hinstDll用于进程B时,系统查看该函数,并检查该DLL的hinstDll是否与它用于进程A时所处的位置相同。如果两个hinstDll是在相同的位置上,那么GetMsgProc函数的内存地址在两个进程的地址空间中的位置也是相同的。在这种情况下,系统只需要调用进程A的地址空间中的GetMsgProc函数即可。如果hinstDll的位置不同,那么系统必须确定进程B的地址空间中GetMsgProc函数的虚拟内存地址。这个地址可以使用下面的公式来确定:GetMsgProc B=hinstDll B + (GetMsgProc A - hinstDll A)将GetMsgProc A的地址减去hinstDll A的地址,就可以得到GetMsgProc函数的地址位移(以字节为计量单位)。将这个位移与hinstDll B的地址相加,就得出GetMsgProc函数在用于进程B的地址空间中该D L L的映像时它的位置。 模态对话框的句柄如何得到(除了Findwindow) VC更改窗口及模拟鼠标点击 Dll开发的问题 抑郁,走不走呢。 VC不完美? CListCtrl里,如何让鼠标能一次连续选定多行? 怎样顺序显示一系列图像? 请教关于CEDIT的问题 csdn的“高手”只能回答低级问题 什么是系统的物理地址?? NTFS文件系统问题 如何编程改变音调?
LPVOID pfnB = hDllB + pfnA - hDllA;
书上是这样讲的:
5) 当DLL的hinstDll用于进程B时,系统查看该函数,并检查该DLL的hinstDll是否与它用
于进程A时所处的位置相同。
如果两个hinstDll是在相同的位置上,那么GetMsgProc函数的内存地址在两个进程的地址
空间中的位置也是相同的。在这种情况下,系统只需要调用进程A的地址空间中的GetMsgProc
函数即可。
如果hinstDll的位置不同,那么系统必须确定进程B的地址空间中GetMsgProc函数的虚拟内
存地址。这个地址可以使用下面的公式来确定:
GetMsgProc B=hinstDll B + (GetMsgProc A - hinstDll A)
将GetMsgProc A的地址减去hinstDll A的地址,就可以得到GetMsgProc函数的地址位移
(以字节为计量单位)。将这个位移与hinstDll B的地址相加,就得出GetMsgProc函数在用于进程B的地址空间中该D L L的映像时它的位置。