我尝试在DLL中声明共享数据段。我用以下地区宣布该地区:
#pragma data_seg(".shared")
int varx=0;
#pragma data_seg()
__declspec(allocate(".shared"))
// I found this declspec suggestion in another forum
#pragma comment (linker,"/section:.shared,RWS")
我也添加
SECTIONS
.shared READ WRITE SHARED
进入def文件。但是我总是得到:
LINK : warning LNK4039: section '.shared' specified with /SECTION option does not exist
错误。如果我只做一个(.def或pragma注释)只得到一个,如果两个都得到两个错误。
我想念的一切?
答案 0 :(得分:3)
我只看到过以这种方式使用的declspec:
__declspec(allocate(".shared")) int varx=0;
我会尝试只写这个:
#pragma comment (linker,"/section:.shared,RWS")
__declspec(allocate(".shared")) int varx=0;
避免声明空部分或多重定义的部分
答案 1 :(得分:0)
说清楚:
data_seg更改obj文件中的默认部分名称,其中初始化为非零变量。因此,如果设置varx = 1,则此变量出现在.shared部分中,并将跨进程共享。我的情况是因为varx = 0而没有出现在那里。
请改用#pragma section并指定声明变量时要使用的部分:__ declspec(allocate(“。shared”))int varx = 0.
请勿使用data_seg关键字。这将允许您不共享任何其他初始化为非零的变量:)