紧急!高分请教如何在DLL中导出全局变量?

ArthurHf 2003-08-25 12:19:59
以下内容来自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在为不同全局变量赋值,请问如何解决此问题!

在此谢过
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArthurHf 2003-08-26
  • 打赏
  • 举报
回复
up.
bigdoors 2003-08-26
  • 打赏
  • 举报
回复
App调用DLL时是把DLL空间映射到自己的进程空间里,所以多个APP调用同一个DLL,DLL
里的变量的地址在APP中会各不相同,chehw(chehw)的方法是使用共享代码段实现多个进程共享同一段内存区(此方法微软现在已不推荐),
此例#1、#2是给同一个全局变量_nVar赋值,没有语义错误
chehw 2003-08-25
  • 打赏
  • 举报
回复
头文件:
#ifndef DLLENTRY
#ifdef _DLLEXPORTS
#define DLLENTRY __declspec(dllexport)
#else
#define DLLENTRY __declspec(dllimport)
#endif
#endif

extern DLLENTRY UINT g_nVar;

cpp文件:
#pragma data_seg("shared")
DLLENTRY UINT g_nVar=0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:shared,RWS")
ArthurHf 2003-08-25
  • 打赏
  • 举报
回复
To chehw(chehw), extern DLLENTRY UINT g_nVar;这句话编译通不过,提示"error C2061: syntax error : identifier 'g_nVar'". UINT已经在之前定义过了,

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧