社区
进程/线程/DLL
帖子详情
******关于lib中的全局变量******
sunsfq
2005-12-15 02:38:31
我做了一个lib库,里面有一个全局变量
static CCmdParseClass *pFirstClass = NULL;
我要在很多模块里面引用这个lib,但是pFirstClass在每一个模块中会有一个copy,
我想让pFirstClass只有一个实体,任何包含该lib的模块都访问同一个pFirstClass。
如何做到?
...全文
356
13
打赏
收藏
******关于lib中的全局变量******
我做了一个lib库,里面有一个全局变量 static CCmdParseClass *pFirstClass = NULL; 我要在很多模块里面引用这个lib,但是pFirstClass在每一个模块中会有一个copy, 我想让pFirstClass只有一个实体,任何包含该lib的模块都访问同一个pFirstClass。 如何做到?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
没有人回答么?
codesys编程手册
中
文版
PLC开发 codesys编程手册,很详细地介绍了codesys开发环境
java笔记 java笔记
java笔记java笔记,java笔记java笔记java笔记java笔记
javax.servlet.jar与javax.servlet.jsp.jar
javax.servlet.jar与javax.servlet.jsp.jar
c++学习笔记,void*及
全局变量
1. void* 可以指向任何类型的数据。在应用
中
,体现内存操作的意义。因此在
lib
发布的头文件
中
多使用void*类型,在实现文件
中
强制类型转换到自己定义的类型,实现封装的隐蔽性。 2. 引用其他文件
中
定义的
全局变量
。在定义
全局变量
的头文件
中
声明
全局变量
,并添加关键字extern,在相应.c文件
中
定义该
全局变量
,即赋值。之后在其他包含该头文件的文件
中
就可以使用该
全局变量
了。 3. 关
静态
lib
和
全局变量
初始化
程序链接静态
lib
时,会将使用到的code部分包含进最终的exe或dll
中
,如果
lib
中
定义了
全局变量
,但这个
全局变量
并没有被其他code使用到,那么最终的exe/dll会执行这个
全局变量
的定义语句吗? [Windows 平台] VS2008 创建Test
Lib
工程,conf
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章