gpt4 book ai didi

c++ - 在 DLL 数据段中存储 vector

转载 作者:太空狗 更新时间:2023-10-29 23:17:26 25 4
gpt4 key购买 nike

信息

以下警告:
LINK:警告 LNK4039:使用/SECTION 选项指定的“.SHARED”部分不存在
每当我尝试在 C++ 中的动态链接库的数据段中存储 vector 时,总是会发生。

举个例子:

#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()

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

我还有一个问题,在 DLL 的数据段中存储 vector 是不是一个糟糕的主意?

我的目标

我正在尝试在 DLL 中共享 vector 的内容,该 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 -|

最佳答案

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

std::vector<> 是如何初始化的?

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

由于代码执行是在该程序的进程空间内,您将默认从该进程地址空间为您的 vector 分配内存。其中任何其他进程将抛出异常试图读取或写入。

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

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

要使其按照您希望的方式工作,需要大量代码。轻松浏览 Std:Vector 代码,直到您可以从该模板派生一个类,或者选择更快的路径,然后从头开始编写您自己的类。

关于c++ - 在 DLL 数据段中存储 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com