DLL和EXE怎样共享全局变量?

全局共享数据       
  #pragma   data_seg   ("shareddata")    
  HWND   sharedwnd=NULL;//共享数据    
  #pragma   data_seg()         
  编译选项加入   /SECTION:shareddata,rws  
============================
用pragma设置共享数据:   

    
  #pragma   data_seg("MYSEC")  
  char   MySharedData[4096]={0};  
  #pragma   data_seg()   

    
  然后在用户的DEF文件中为有名的数据区设定共享属性。  
  LIBRARY   TEST  
  DATA   READ   WRITE  
  SECTIONS  
  .MYSEC   READ   WRITE   SHARED  
   
  在应用程序(进程)按外部变量引用共享数据。  
  extern   _export"C"{char   *   MySharedData[];}  
  进程中使用该变量应注意间接引用。  
  m_pStatic=(CEdit*)GetDlgItem(IDC_SHARED);  
  m_pStatic->GetLine(0,*MySharedData,80);
=====================================

  //Global.h   In   DLL  
  #pragma   once  
  #include   "StdAfx.h"  
  #pragma   data_seg(".Shared")  
  int   g_nExport   =   33333;  
  CString   g_strExport   =   "DLLEXPORT";  
  #pragma   data_seg()       
  #pragma   comment(linker,"/SECTION:.Shared,RWS")  
如果DLL中定义了共享变量A,EXE1载入DLL,另外一个EXE2也载入DLL,则EXE1里的DLL   和   EXE2里的DLL将可以访问同一个A;而不是EXE1和DLL之间共享,也不是EXE2和DLL之间共享。  
  另外,EXE要访问DLL里的全局变量,则DLL必须把变量export出来,EXE再import,import有隐式或显式

你可能感兴趣的:(c,dll,exe,import,library,linker)