我做了一个全局钩子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?

解决方案 »

  1.   

    可以的,否则怎么叫share数据段?
      

  2.   

    可以的,但是请注意共享段里面的变量要初始化才有效
    #pragma data_seg("aaaaa")
    HHOOK hHook=NULL;
    HINSTANCE hins;
    CRITICAL_SECTION cs_disk;
    int pressed;
     
    #pragma data_seg()
      

  3.   

    经测试, 不能这样直接访问共享变量, 但可以在DLL中写一个输出函数取得该值