C++ 在windows文件映射中将多个变量放入一个共享内存

C++ 在windows文件映射中将多个变量放入一个共享内存,c++,windows,shared-memory,C++,Windows,Shared Memory,在本主题中,您可以看到如何将2个变量放入C中的一个共享内存中 但是,我想使用MapViewOfFile函数将多个变量放入一个共享内存中。 但我没有找到任何例子或解决方案。 变量的类型不同,所以我不能使用std::vector或array 我应该如何设置CreateFileMapping和MapViewOfFile的参数来实现这一点? 如何在FileMapping中获取和设置要读写变量的地址 我不必为每个变量创建文件映射,对吗?在同一内存块中让两个变量背靠背的最简单方法是使用结构:。 如果您想使用

在本主题中,您可以看到如何将2个变量放入C中的一个共享内存中

但是,我想使用MapViewOfFile函数将多个变量放入一个共享内存中。 但我没有找到任何例子或解决方案。 变量的类型不同,所以我不能使用std::vector或array

我应该如何设置CreateFileMapping和MapViewOfFile的参数来实现这一点? 如何在FileMapping中获取和设置要读写变量的地址


我不必为每个变量创建文件映射,对吗?

在同一内存块中让两个变量背靠背的最简单方法是使用结构:。 如果您想使用shmget,只需调整分配的内存大小即可

shmid = shmget (shmkey, sizeof(var1) + sizeof(var2), 0644 | IPC_CREAT);

然后,根据需要调整指针。

使用DaveEtherock指出的结构。 您必须为“CreateFileMapping”和“MapViewOfFile”指定所有成员的总大小。然后可以将MapViewOfFile的返回void指针强制转换为结构指针类型

例如,如果您有一个类似

typedef struct combinedStruct {
    int intVariable;
    float floatVariable;
}CombinedStruct; 
您必须创建CombinedStruct类型的指针并强制转换MapViewOfFile的返回

CombinedStruct*structPtr=(CombinedStruct*)(MapViewOfFile(…)


然后,您可以访问单个变量,如
structPtr->intVariable
structPtr->floatVariable

这可能更适合作为注释,但我没有足够的声誉来评论。 我也在寻找同一个问题的答案,正如@Manoj AV所说,我做了一个改变-

CopyMemory
中,我没有将其作为
structPtr->intVariable
structPtr->floatVariable
进行检索,而是将
structPtr
用于第一个变量,并将
structPtr+1
用于检索结构中的第二个变量,依此类推。它运行成功