C++ 在windows文件映射中将多个变量放入一个共享内存
在本主题中,您可以看到如何将2个变量放入C中的一个共享内存中 但是,我想使用MapViewOfFile函数将多个变量放入一个共享内存中。 但我没有找到任何例子或解决方案。 变量的类型不同,所以我不能使用std::vector或array 我应该如何设置CreateFileMapping和MapViewOfFile的参数来实现这一点? 如何在FileMapping中获取和设置要读写变量的地址C++ 在windows文件映射中将多个变量放入一个共享内存,c++,windows,shared-memory,C++,Windows,Shared Memory,在本主题中,您可以看到如何将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
用于检索结构中的第二个变量,依此类推。它运行成功