共享数据段中的数据在其他程序中可以直接显示吗?
我做了一个全局钩子DLL, 其中有共享数据段,
#pragma data_seg("aaaaa")
HHOOK hHook=NULL;
HINSTANCE hins;
CRITICAL_SECTION cs_disk;
int pressed;
#pragma data_seg()
#pragma comment(linker,"/SECTION:aaaaa,RWS") // tell linker: make it shared
钩子中会改变pressed的值.
另写一个测试程序:
也加入:
#pragma data_seg("aaaaa")
HHOOK hHook=NULL;
HINSTANCE hins;
CRITICAL_SECTION cs_disk;
int pressed;
#pragma data_seg()
#pragma comment(linker,"/SECTION:aaaaa,RWS") // tell linker: make it shared
然后加载上面的DLL, 然后安装钩子.
然后有一个线程执行:
while(1)
{
str.Format("dkkdkdk: %d", pressed);
OutputDebugString(str);
Sleep(1000);
}
通过Debugviw可以看到: DLL中将pressed的值设为1, 可EXE程序取得的pressed值还是0.
why?
[解决办法]
可以的,否则怎么叫share数据段?
[解决办法]
可以的,但是请注意共享段里面的变量要初始化才有效
#pragma data_seg("aaaaa")
HHOOK hHook=NULL;
HINSTANCE hins;
CRITICAL_SECTION cs_disk;
int pressed;
#pragma data_seg()