gpt4 book ai didi

c++ - 使用 MapViewOfFile 分配静态共享内存

转载 作者:行者123 更新时间:2023-11-28 05:07:01 26 4
gpt4 key购买 nike

如何使用 CreateFileMapping 和 MapViewOfFile 将共享内存分配给静态缓冲区,如下所示。

#pragma data_seg(".ABC")
__declspec (dllexport) char buffer[10000] = {0};
#pragma data_seg()
#pragma comment(linker, "-section:.ABC,rws")

目标是创建一个在 C++ 和 FORTRAN 应用程序之间共享的静态共享缓冲区,就像在使用 data_seg 时所做的那样。创建动态分配的缓冲区时,FORTRAN 变得棘手,因为您需要取消引用指针,这也是可行的,但这不是我想要的。

最佳答案

等效的 Win32 API 调用如下所示:

SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);

SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = FALSE;

HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, &sa, PAGE_READWRITE, 0, 10000, TEXT("ABC"));
if (!hMapping) ... // error handling

char *buffer = (char*) MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 10000);
if (!buffer) ... // error handling

// use buffer as needed...

UnmapViewOfFile(buffer);
CloseHandle(hMapping);

两个应用程序都必须使用相同的 lpName 值调用 CreateFileMapping() 才能访问系统内核中的相同映射对象。无论哪个应用程序首先调用 CreateFileMapping() 都会创建对象,第二个应用程序将获得现有对象的句柄。然后,MapViewOfFile() 将调用进程中的内存访问映射到该对象。这样,两个应用程序都在使用彼此共享的内存。当一个应用程序将数据写入对象时,另一个应用程序将看到它。

关于c++ - 使用 MapViewOfFile 分配静态共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458520/

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