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);
}