我开发了一个钩子的DLL,我在钩子函数里,获得了一个键盘输入的一段数据,然后我想把这段数据用一个在DLL里的全局变量保存下来,但是我用调用函数,就是调用钩子的DLL的外部程序,去取这个保存数据的全局变量的时候发现,这个变量的值没有保存,也就是说在钩子函数里的时候,我看了这个变量的值是有的,请解释一下怎么回事!

解决方案 »

  1.   

    DLL中的全局变量,对于每一个进程调用,系统会为他创建一个副本,以避免不同进程之间的干扰。所以你看到的不同进程中的变量虽然名称相同却不是同一变量。
      

  2.   

    如果要放到共享数据段里面
    只能用 char[]之类的形式
    也就是标准c的数据类型
    不要放CString[] 之类的
      

  3.   

    #pragma data_seg("Hookdata")
    HWND        s_hTargetWnd    = NULL;
    HINSTANCE   g_hModule       = NULL;
    HHOOK       g_hHook         = NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:Hookdata,RWS")
    上面的是共享数据段
    其他和一般数据一样用酒可以
      

  4.   

    CreateFileMapping()
    这个方法也不错 ,如果数据量大就用这种方法最好
      

  5.   

    但是如果我是字符串,我定义成 
    #pragma data_seg("Hookdata")
    char szMsg[1024];
    #pragma data_seg()
    #pragma comment(linker, "/section:Hookdata,RWS")可是还是不行呀,得不到值,怎么回事?