我做了一个lib库,里面有一个全局变量
static CCmdParseClass *pFirstClass = NULL;
我要在很多模块里面引用这个lib,但是pFirstClass在每一个模块中会有一个copy,
我想让pFirstClass只有一个实体,任何包含该lib的模块都访问同一个pFirstClass。
如何做到?

解决方案 »

  1.   

    #pragma data_seg("Shared")
    CCmdParseClass *pFirstClass = NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:Shared,rws")
      

  2.   

    这样只是共享了pFirstClass 指针,可以用全局对象试试
    #pragma data_seg("Shared")
    CCmdParseClass FirstClass; //必须要初始化
    #pragma data_seg()
    #pragma comment(linker, "/section:Shared,rws")
      

  3.   

    .2、利用共享内存DLL 
      共享数据DLL允许进程以类似于Windows 3.1 DLL共享数据的方式访问读写数
    据,多个进程都可以对该共享数据DLL进行数据操作,达到共享数据的目的。在
    WIN32中为建立共享内存,必须执行以下步骤: 
      首先创建一个有名的数据区。这在Visual C++中是使用data_seg pragma宏
    。使用data_seg pragma宏必须注意数据的初始化: 
      #pragma data_seg(“MYSEC") 
      char MySharedData[4096]={0}; 
      #pragma data_seg() 
      然后在用户的DEF文件中为有名的数据区设定共享属性。 
      LIBRARY TEST 
      DATA READ WRITE 
      SECTIONS 
      .MYSEC READ WRITE SHARED 
      这样每个附属于DLL的进程都将接受到属于自己的数据拷贝,一个进程的数据
    变化并不会反映到其他进程的数据中。 
      在DEF文件中适当地输出数据。以下的DEF文件项说明了如何以常数变量的形
    式输出MySharedData。 
      EXPORTS 
      MySharedData CONSTANT 
      最后在应用程序(进程)按外部变量引用共享数据。 
      extern _export"C"{char * MySharedData[]}
      进程中使用该变量应注意间接引用。 
      m_pStatic=(CEdit*)GetDlgItem(IDC_SHARED); 
      m_pStatic->GetLine(0,*MySharedData,80); 
      

  4.   

    #pragma data_seg("Shared")
    CCmdParseClass *pFirstClass = NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:Shared,rws")
    -----------------------------------------------------
    这种方法,我试了,不行。
      

  5.   

    这样每个附属于DLL的进程都将接受到属于自己的数据拷贝,一个进程的数据变化并不会反映到其他进程的数据中。 
    -------------这里意思好像就是只能共享读,一个进程改变了数据,其他进程无法获知
      

  6.   

    我的这个工程是lib,不是dll。
      

  7.   

    lib? 静态库? 静态库会直接link进exe,所以不能share了
      

  8.   

    debug跟进去确实不行。
    下面方法不行。#pragma data_seg("Shared")
    CCmdParseClass *pFirstClass = NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:Shared,rws")