******关于lib中的全局变量******

sunsfq 2005-12-15 02:38:31
我做了一个lib库,里面有一个全局变量
static CCmdParseClass *pFirstClass = NULL;
我要在很多模块里面引用这个lib,但是pFirstClass在每一个模块中会有一个copy,
我想让pFirstClass只有一个实体,任何包含该lib的模块都访问同一个pFirstClass。
如何做到?
...全文
328 13 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
没有人回答么?

15,472

社区成员

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

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