以下内容来自DLL对外公开的头文件:extern "C"
{
#define DllExport(v) __declspec(dllexport) v __cdecl
typedef unsigned int S_UINT;
extern __declspec(dllexport) S_UINT _nVar = 123;
DllExport(void) vSetVar(S_UINT nVar);
}其中vSetVar在DLL一C文件实现更改全局变量_nVar的值以下内容来自Win32 Application对该DLL的调用
_nVar = 110; // #1
vSetVar(189); // #2程序能够编译运行,但是奇怪的是在Win32 Application和DLL内部看到的该全局变量的地址不一样(初始值都是123),也就是说语句#1和#2在为不同全局变量赋值,请问如何解决此问题!在此谢过
{
#define DllExport(v) __declspec(dllexport) v __cdecl
typedef unsigned int S_UINT;
extern __declspec(dllexport) S_UINT _nVar = 123;
DllExport(void) vSetVar(S_UINT nVar);
}其中vSetVar在DLL一C文件实现更改全局变量_nVar的值以下内容来自Win32 Application对该DLL的调用
_nVar = 110; // #1
vSetVar(189); // #2程序能够编译运行,但是奇怪的是在Win32 Application和DLL内部看到的该全局变量的地址不一样(初始值都是123),也就是说语句#1和#2在为不同全局变量赋值,请问如何解决此问题!在此谢过
#ifndef DLLENTRY
#ifdef _DLLEXPORTS
#define DLLENTRY __declspec(dllexport)
#else
#define DLLENTRY __declspec(dllimport)
#endif
#endifextern DLLENTRY UINT g_nVar;cpp文件:
#pragma data_seg("shared")
DLLENTRY UINT g_nVar=0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:shared,RWS")
里的变量的地址在APP中会各不相同,chehw(chehw)的方法是使用共享代码段实现多个进程共享同一段内存区(此方法微软现在已不推荐),
此例#1、#2是给同一个全局变量_nVar赋值,没有语义错误