信息
以下警告:
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 -|
答案 0 :(得分:0)
http://msdn.microsoft.com/en-us/library/h90dkhs0(v=vs.90).aspx
std :: vector&lt;&gt;怎么样?初始化?
是的,使用共享数据段是一个糟糕的主意。
由于执行的代码在该程序的进程空间内,因此您将默认为该进程的地址空间分配内存。其中任何其他进程都会尝试读取或写入异常。
您可以编写自己的_alloc来从系统共享内存中提取,但这不会解决您的初始化问题。
推荐的ipc方法是通过内存映射文件和互斥锁。
要按照您的方式工作,需要大量的代码。通过Std:Vector代码轻松查看,直到您可以从该模板派生类,或选择更快的路径,并从头开始编写自己的类。