遇到一个DLL和应用程序间共享数据的问题
目前我用的是共享内存的方法,DLL是包含一个全局钩子,和一个共享数据段:
#pragma data_seg("Infopeek_hook_data")
HWND glhRecieveWnd = NULL;
HHOOK glhHookWndProc = NULL;
HINSTANCE glhInstance = NULL;
_declspec(dllexport) TCHAR glszTitle[256];//这个定义下面详述
#pragma data_seg()
在del文件中
SECTIONS
Infopeek_hook_data READ WRITE SHARED
程序调用DLL,程序创建一个FileMapping,在DLL的DLLMAIL中OpenFileMapping:
.......
new CDynLinkLibrary(InfopeekhookDLL);
glhInstance=hInstance;
glhFilemap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,
FALSE, _T("Infopeek Map_file"));
if (glhFilemap != NULL)
{
glpMapAddress = ::MapViewOfFile(glhFilemap,
FILE_MAP_ALL_ACCESS,
0, 0, 0);
}
这样,全局DLL加载到所有进程的地址空间,所以所有的进程和我的应用程序之间都有共享的页.这样的确实现了我的要求.
但是后来我突然发现,为什么不直接使用段("Infopeek_hook_data")?它不就是天然的
共享段吗?所有进程都有这个共享的段,但是在我的进程中该怎么引用这个段呢???
所以我用在段中用了_declspec(dllexport) TCHAR glszTitle[256];
但是变量不同于函数,我还是用不了.
帮我啊!!!!!!!!!!!!!!!!!!!!