字体
第(2/5)页
关灯
   存书签 书架管理 返回目录
ata_seg 建立一个新的数据段并定义共享数据,其具体格式为:

    pragma data_seg ("shareddata")

    HWND sharedwnd=NULL;//共享数据

    #pragma data_seg()

    所有在data_seg pragmas 语句之间声明的变量都将在shareddata 段中。仅定义一个数据段

    还不能达到共享数据的目的,还要告诉编译器该段的属xìng,有两种方法可以实现该目的(其

    效果是相同的),一种方法是在DEF 文件中加入如下语句:

    SETCTIONS

    shareddata READ WRITE SHARED

    另一种方法是在项目设置链接选项中加入如下语句:

    /SECTION:shareddata,rws

    MouseHookDll 是一个MFC 扩展动态链接库,其中包含的安装钩子和卸载钩子的全局函

    数如下:

    BOOL __stdcall StartHook(HWND hwnd);

    BOOL __stdcall StopHook();

    全局共享数据声明如下:

    #pragma data_seg("mydata")

    HWND glhPrevTarWnd=NULL; //上次鼠标所指的窗口句柄

    HWND glhDisplayWnd=NULL; //显示目标窗口标题编辑框的句柄

    HHOOK glhHook=NULL; //安装的鼠标勾子句柄

    HINSTANCE glhInstance=NULL; //DLL 实例句柄

    #pragma data_seg()

    在DEF 文件中加入如下定义:

    SECTIONS

    mydata READ WRITE SHARED

    在主文件MouseHookDll.cpp 的DllMain()函数中加入保存DLL 实例句柄的语句如下:

    extern "C" int APIENTRY

    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)

    {

    UNREFERENCED_PARAMETER(lpReserved);

    if (dwReason == DLL_PROCESS_ATTACH)

    {

    if (!AfxInitExtensionModule(MouseHookDLL, hInstance))

    return 0;

    new CDynLinkLibrary(MouseHookDLL);

    glhInstance=hInstance; //chā入保存DLL 实例句柄

    }

    else if (dwReason == DLL_PROCESS_DETACH)

    {

    枫叶文学网www.fywxw.com

    Visual C++ 6.0 程序设计从入门到精通

    ·276·

    AfxTermExtensionModule(MouseHookDLL);

    }

   
上一页 目录 下一页