Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1301231
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2010-07-13 17:01:18

1.:#pragmacomment(linker,"/section:Shared,rws")函数中的带双引号的参数不要有空格
 
2.dll被所有引用的程序释放后,再次被其他程序加载后共享段数据被重新初始化(出现不能共享的错觉)
 
 
 
 
--------------------------------------

下面来谈一下在具体使用共享数据段时需要注意的一些问题:

·         所有在共享数据段中的变量,只有在数据段中经过了初始化之后,才会是进程间共享的。如果没有初始化,那么进程间访问该变量则是未定义的。
·         所有的共享变量都要放置在共享数据段中。如何定义很大的数组,那么也会导致很大的DLL。
·         不要在共享数据段中存放进程相关的信息。Win32中大多数的数据结构和值(比如HANDLE)只在特定的进程上下文中才是有效地。
·         每个进程都有它自己的地址空间。因此不要在共享数据段中共享指针,指针指向的地址在不同的地址空间中是不一样的。
·         DLL在每个进程中是被映射在不同的虚拟地址空间中的,因此函数指针也是不安全的。
http://www.cppblog.com/suiaiguo/archive/2009/07/21/90734.aspx?opt=admin

----------------------------------------
平台:windowsXPVC6sp6我编写了一个DLL,我希望通过以下代码向让nCount在所有加载该DLL的进程中共享变量nCount,但是事实上Share数据段并没有共享。我用IDApro看Share数据段的flag是:DataReadableWritable#pragmadata_seg("Shared")intnCount=0;#pragmadata_seg()#pragmacomment(linker,"/section:Shared,rws")//*然后,我换了个方法:在def文件中添加以下一句话,SECTIONSSharedREADWRITESHARED并把上面代码中*标示的那句删除,Share段就被共享了。IDApro显示中,flagataShareableReadableWritable请问为什么第一种方法达不到共享的目的?
网友回答:#pragmacomment(linker,"/section:Shared,rws")中间不要加空格
网友回答:"/section:Shared,rws"试试删除rws前面的空格
网友回答:多谢cdeee、zzz3265的确是因为这个空格的原因,我把空格去掉后,Share数据段就是共享的了。多谢!
阅读(1950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~