读书人

dll键盘钩子中全局数组失效怎么解决呢

发布时间: 2014-06-18 16:28:34 作者: rapoo

dll键盘钩子中全局数组失效如何解决呢?
在程序A中加载dll中的SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,g_hinstDll, dwThreadId);启动局部键盘钩子,hook住程序B的某窗口

dll中同时声明了一个全局数组int exTable[100],并且用如下函数进行赋值

extern"C"__declspec(dllexport) void SetTable(const int* ptr)
{
memmove(exTable, ptr, sizeof(int) * 100);
}

但是到了HookProc的消息拦截部分,读取exTable[100]数组发现内容和设定不同,但是exTable的地址并未发生变化

个人推断这个是因为HookProc是运行在钩子hook到的程序B的进程中,而exTable实际存储的数据是在加载dll的程序A的进程地址中,所以调用失效。因为自己对dll还很迷糊,不知道这个猜测是否正确?

另求此问题的解决方法,谢谢各位

[解决办法]
个人推断这个是因为HookProc是运行在钩子hook到的程序B的进程中,而exTable实际存储的数据是在加载dll的程序A的进程地址中,所以调用失效。因为自己对dll还很迷糊,不知道这个猜测是否正确?
=============
DLL一般只共享代码段,对于数据区,并不共享,可以用共享数据区来让数组共享,像下面这样定义数组
#pragma data_seg("shared")
char a[32] = "hello world";
#pragma data_seg()
#pragma comment(linker, "/SECTION:shared, RWS")

读书人网 >VC/MFC

热点推荐