能不能帮我看一下这一句话,怎么用程序实现:
GetMsgProc B=hinstDll B + (GetMsgProc A - hinstDll A)在电子版《WINDOWS 核心编程》第22章 519页。

解决方案 »

  1.   

    LPVOID pfnA = GetProcAddress(hDllA, "GetMsgProc);
    LPVOID pfnB = hDllB + pfnA - hDllA;
      

  2.   

    在电子版《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的映像时它的位置。