有一个Share.dll,接口函数是  
WriteRecord(DATA&);  
ReadRecord(DATA&);  
全局静态成员  
static  DATA  g_data;  
还有二个进程P1和P2,他们都加载Share.dll  
P1调用WriteRecord  
P2调用ReadRecord  
 
调试的时候P1进程的WriteRecord可以正常执行,且g_data的值也被正确地传进去了  
这时P2进程用ReadRecord时,跟踪到DLL内的时候从P2进程传过来的DATA的引用是不可用的,为什么啊??用了指针也不行,期待各位高手解答!!!

解决方案 »

  1.   

    static变量是不行的。因为dll会被每个进程映射到自己的地址空间。包括静态数据。用DLL来共享数据要用共享节。share segment
      

  2.   

    #pragma data_seg预处理指令用于设置共享数据段。例如:
    #pragma data_seg("SharedDataName")
    HHOOK hHook=NULL;
    #pragma data_seg()在#pragma data_seg("SharedDataName")和#pragma data_seg()之间的所有变量将被访问该Dll的所有进程看到和共享。再加上一条指令#pragma comment(linker,"/section:.SharedDataName,rws"),那么这个数据节中的数据可以在所有DLL的实例之间共享。所有对这些数据的操作都针对同一个实例的,而不是在每个进程的地址空间中都有一份。
      

  3.   

    除了上面的以外,文件映射(File Mapping), 管道(Pipe), 剪帖板(DDE)都可以达到