社区
进程/线程/DLL
帖子详情
******关于lib中的全局变量******
sunsfq
2005-12-15 02:38:31
我做了一个lib库,里面有一个全局变量
static CCmdParseClass *pFirstClass = NULL;
我要在很多模块里面引用这个lib,但是pFirstClass在每一个模块中会有一个copy,
我想让pFirstClass只有一个实体,任何包含该lib的模块都访问同一个pFirstClass。
如何做到?
...全文
328
13
打赏
收藏
******关于lib中的全局变量******
我做了一个lib库,里面有一个全局变量 static CCmdParseClass *pFirstClass = NULL; 我要在很多模块里面引用这个lib,但是pFirstClass在每一个模块中会有一个copy, 我想让pFirstClass只有一个实体,任何包含该lib的模块都访问同一个pFirstClass。 如何做到?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunsfq
2005-12-15
打赏
举报
回复
debug跟进去确实不行。
下面方法不行。
#pragma data_seg("Shared")
CCmdParseClass *pFirstClass = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
oyljerry
2005-12-15
打赏
举报
回复
lib? 静态库? 静态库会直接link进exe,所以不能share了
oyljerry
2005-12-15
打赏
举报
回复
为什么不行? 什么不行?
sunsfq
2005-12-15
打赏
举报
回复
我的这个工程是lib,不是dll。
oyljerry
2005-12-15
打赏
举报
回复
这样每个附属于DLL的进程都将接受到属于自己的数据拷贝,一个进程的数据变化并不会反映到其他进程的数据中。
-------------这里意思好像就是只能共享读,一个进程改变了数据,其他进程无法获知
sunsfq
2005-12-15
打赏
举报
回复
#pragma data_seg("Shared")
CCmdParseClass *pFirstClass = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
-----------------------------------------------------
这种方法,我试了,不行。
oyljerry
2005-12-15
打赏
举报
回复
.2、利用共享内存DLL
共享数据DLL允许进程以类似于Windows 3.1 DLL共享数据的方式访问读写数
据,多个进程都可以对该共享数据DLL进行数据操作,达到共享数据的目的。在
WIN32中为建立共享内存,必须执行以下步骤:
首先创建一个有名的数据区。这在Visual C++中是使用data_seg pragma宏
。使用data_seg pragma宏必须注意数据的初始化:
#pragma data_seg(“MYSEC")
char MySharedData[4096]={0};
#pragma data_seg()
然后在用户的DEF文件中为有名的数据区设定共享属性。
LIBRARY TEST
DATA READ WRITE
SECTIONS
.MYSEC READ WRITE SHARED
这样每个附属于DLL的进程都将接受到属于自己的数据拷贝,一个进程的数据
变化并不会反映到其他进程的数据中。
在DEF文件中适当地输出数据。以下的DEF文件项说明了如何以常数变量的形
式输出MySharedData。
EXPORTS
MySharedData CONSTANT
最后在应用程序(进程)按外部变量引用共享数据。
extern _export"C"{char * MySharedData[]}
进程中使用该变量应注意间接引用。
m_pStatic=(CEdit*)GetDlgItem(IDC_SHARED);
m_pStatic->GetLine(0,*MySharedData,80);
oyljerry
2005-12-15
打赏
举报
回复
放到共享数据段中来共享
gohappy_1999
2005-12-15
打赏
举报
回复
lib也行?
Kudeet
2005-12-15
打赏
举报
回复
这样只是共享了pFirstClass 指针,可以用全局对象试试
#pragma data_seg("Shared")
CCmdParseClass FirstClass; //必须要初始化
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
Kudeet
2005-12-15
打赏
举报
回复
#pragma data_seg("Shared")
CCmdParseClass *pFirstClass = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
gohappy_1999
2005-12-15
打赏
举报
回复
肯怕不行
sunsfq
2005-12-15
打赏
举报
回复
没有人回答么?
c++学习笔记,void*及
全局变量
1. void* 可以指向任何类型的数据。...在定义
全局变量
的头文件
中
声明
全局变量
,并添加关键字extern,在相应.c文件
中
定义该
全局变量
,即赋值。之后在其他包含该头文件的文件
中
就可以使用该
全局变量
了。 3. 关
python种局部变量和
全局变量
之隐藏机制
函数
中
可以访问
全局变量
但是还有个隐藏机制会始报错 x=5 def f(): x=10 #若是局部变量赋值与
全局变量
相同 此时用的是局部变量,因为当局部变量和
全局变量
具有相同的变量名时
全局变量
被隐藏了 return x print(f())...
静态
lib
和
全局变量
初始化
程序链接静态
lib
时,会将使用到的code部分包含进最终的exe或dll
中
,如果
lib
中
定义了
全局变量
,但这个
全局变量
并没有被其他code使用到,那么最终的exe/dll会执行这个
全局变量
的定义语句吗? [Windows 平台] VS2008 ...
C语言
中
全局变量
,静态变量的危险性
全局变量
的危险性在于它的访问权限暴露在整个项目
中
,可能由于某个函数的异常,导致
全局变量
有时候会莫名的被修改了.这一点在多线程编程
中
尤其需要注意 ,看以下代码运行结果: #include <stdio.h> int ...
Linux C
中
动态链接库的
全局变量
问题
如果一个共享对象
lib
test.so
中
定义了一个
全局变量
G,而进程A和进程B都使用了
lib
test.so, 那么当进程A改变这个
全局变量
G的值时,进程B
中
的G会受到影响吗? 古人云:实践出真知... /* * =========================...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章