在DLL数据段中存储矢量

时间:2013-08-12 08:07:30

标签: c++ vector data-segment

信息

以下警告:
LINK : warning LNK4039: section '.SHARED' specified with /SECTION option does not exist
每当我尝试将矢量存储在C ++中的动态链接库的数据段中时,总是会发生。

举个例子:

#include <vector>

struct Obj {
   unsigned int A;
   unsigned int B;
   bool C;
   std::vector< unsigned char > D;
};

#pragma data_seg( ".SHARED" )
std::vector< Obj > Objects;
#pragma data_seg()

#pragma comment ( linker,"/section:.SHARED,RWS" )

但是,如果我尝试存储一个简单的变量,编译时就不会有警告。 像这样:

#pragma data_seg (".SHARED" )
int SimpleVariable = 0;
#pragma data_seg()

我不是绝对肯定的,但我相信警告是由于没有初始化矢量引起的?如果是这样,我们如何初始化将存储在数据段中的向量?

我有另一个问题,将数据段中的向量存储在DLL中这是一个可怕的想法吗?

我的目标

我正在尝试在DLL中共享向量的内容,这将被加载到几个不同的进程中。

像这样:

process_1.exe
    - example.dll -|    * access the same vector (SomeVector) as
                   |      example.dll within process_2
                   |
                std::vector SomeVector; // vector in example.dll
                   |
process_2.exe      |    * access the same vector (SomeVector) as
                   |      example.dll within process_1
    - example.dll -|    

1 个答案:

答案 0 :(得分:0)

http://msdn.microsoft.com/en-us/library/h90dkhs0(v=vs.90).aspx

std :: vector&lt;&gt;怎么样?初始化?

是的,使用共享数据段是一个糟糕的主意。

由于执行的代码在该程序的进程空间内,因此您将默认为该进程的地址空间分配内存。其中任何其他进程都会尝试读取或写入异常。

您可以编写自己的_alloc来从系统共享内存中提取,但这不会解决您的初始化问题。

推荐的ipc方法是通过内存映射文件和互斥锁。

要按照您的方式工作,需要大量的代码。通过Std:Vector代码轻松查看,直到您可以从该模板派生类,或选择更快的路径,并从头开始编写自己的类。