关于DLL全局变量的生存期

青蛙工作室 2009-11-12 12:00:17
如题,在DLL中
// dll代码开始
int a=0 ;

export int __stdcal seta (int x )
{
a = x ;
}

export int __stdcal geta()
{
return a;
} //DLL代码结束

在EXE中,先调用seta(10),再调用geta(),能得到10吗?
...全文
322 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnuke 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cyldf 的回复:]
引用 11 楼 xinhunter 的回复:
引用 10 楼 yndfcd 的回复:
在dll被加载到内存之前,进行初始化.在dll被卸载之后,释放掉.

那加载和卸载都发生在什么时候?

加载就是你在loadDll时候啊
卸载在程序结束之后
[/Quote]
卸载还有可能是在你程序里自己调用FreeLibrary的时候。
cyldf 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xinhunter 的回复:]
引用 10 楼 yndfcd 的回复:
在dll被加载到内存之前,进行初始化.在dll被卸载之后,释放掉.

那加载和卸载都发生在什么时候?
[/Quote]
加载就是你在loadDll时候啊
卸载在程序结束之后
青蛙工作室 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yndfcd 的回复:]
在dll被加载到内存之前,进行初始化.在dll被卸载之后,释放掉.
[/Quote]
那加载和卸载都发生在什么时候?
青蛙工作室 2009-11-13
  • 打赏
  • 举报
回复
不好意思我没有说清楚,我的DLL是给VB用的,用declare 声明的DLL 。
卸载是在程序结束之后,那加载是不是在第一次调用某一个函数的时候?
forster 2009-11-12
  • 打赏
  • 举报
回复
同意exe可以
不同exe也可以 需要分配到共享节
野男孩 2009-11-12
  • 打赏
  • 举报
回复
同一个进程里面,就是全局有效的。不同进程之间没用,除非把数据定义在共享段
icycode 2009-11-12
  • 打赏
  • 举报
回复
发错了
icycode 2009-11-12
  • 打赏
  • 举报
回复
cout<<setiosflags(ios::left)<<"第一列"<<setiosflags(ios::right)<<"第二列";

这样可以吧
aizibion 2009-11-12
  • 打赏
  • 举报
回复
进程空间是独立的,所以猜测dll中的变量应该是每个进程一个副本
老邓 2009-11-12
  • 打赏
  • 举报
回复
如果你需要DLL中的全局变量为不同模块共享,则需要这样:http://msdn.microsoft.com/zh-cn/library/h90dkhs0(VS.80).aspx
老邓 2009-11-12
  • 打赏
  • 举报
回复
同一个EXE中,是可以的。
但不同的模块,则不行。
jackyjkchen 2009-11-12
  • 打赏
  • 举报
回复
试一下吧,没研究过
yndfcd 2009-11-12
  • 打赏
  • 举报
回复
在dll被加载到内存之前,进行初始化.在dll被卸载之后,释放掉.
青蛙工作室 2009-11-12
  • 打赏
  • 举报
回复
谢谢这么多回复。
下一个接着问,那个全局变量a的生存期是从哪到哪?谁可以访问?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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