码迷,mamicode.com
首页 > 系统相关 > 详细

DLL中建立进程共享数据段需要注意的语法问题

时间:2015-01-02 18:48:10      阅读:391      评论:0      收藏:0      [点我收藏+]

标签:

默认情况下,所有的数据段都是进程独立的,每个进程有自己的一份。但有时候进程共享一个数据段也是有需要的,为此VC++编译连接器提供了专门的语法,下面是一个典型的例子,建立了一个名为Shared的共享数据段,该数据段里只有一个变量g_hwndOwner。


////////////////////////////////////////////// 进程共享区 ///////////////////////////////////////
#pragma data_seg("Shared")
HWND g_hwndOwner = NULL;		// 调用SetWindowsHookEx的线程的主窗口
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws") // 可读,可写,进程间共享。所有加载此dll的进程共享一份内存


看似简单的东西,却往往很容易让我们犯错。下面是几个需要注意的语法问题:

(1)数据段的名称为“Shared”,那么在设置该段属性的时候,一定要保证段名称完全与“Shared”相同,而且大小写敏感。一旦两者不同,连接器会警告错误。

>LINK : warning LNK4039: 用 /SECTION 选项指定的节“Shar2ed”不存在。注意是警告错误,所以DLL文件会继续编译连接成功,只是Shared数据段并没有设置为共享段。


(2)共享段中的变量一定要初始化,否则连接器也会报错,也不能正常设置为共享段。

1>LINK : warning LNK4039: 用 /SECTION 选项指定的节“Shared”不存在。 但是继续生成dll文件。


(3)最后一行中的rws之前不能有空格,否则编译器报错。

1>main.obj : fatal error LNK1276: 找到无效的指令“rws”; 未以“/”开头。然后停止编译连接。


这三种错误,最严重的就是(1)和(2),因为虽然没有成功设置共享段,但是仍然编译成功,稍不注意,就会非常危险。对于(3)则根本不能编译成功,所以只要了解语法修改就可以了,不存在潜在危险。


??

DLL中建立进程共享数据段需要注意的语法问题

标签:

原文地址:http://blog.csdn.net/smstong/article/details/42342651

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!