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有隐式或显式
===========================
http://hi.baidu.com/shilyx/blog/item/2017dca29b1777accaefd0e1.html 全局共享变量初始化