OpenFileMapping: GetLastError=2

OpenFileMapping: GetLastError=2

本文关键字:GetLastError OpenFileMapping      更新时间:2023-10-16

我正在尝试在两个进程C#(EXE(和C++(DLL(之间共享内存。 C++ DLL 由 Citrix 接收器进程动态加载。

下面是我的 C# 和 C++ 代码:

private void Test()
{
string data = "Hello";
_memoryMap = MemoryMappedFile.CreateOrOpen("14614C87-8D7F-45FC-8D59-DCBF1715A715", data.Length, MemoryMappedFileAccess.ReadWrite);
var stream = _memoryMap.CreateViewStream();
using (BinaryWriter binReader = new BinaryWriter(stream))
{
binReader.Write(data);
}
}
void readFromMemoryMap()
{   
HANDLE hMapObject = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, L"14614C87-8D7F-45FC-8D59-DCBF1715A715");
char buffer[2000];
if (hMapObject == NULL)
{
sprintf(buffer, "OpenFileMapping: GetLastError=%d", GetLastError());        
}
char *fileBuffer = (char *)MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, 6);
UnmapViewOfFile(fileBuffer);
CloseHandle(hMapObject);
}

我负责编写和读取对象序列。我的 C# 应用程序的内存映射句柄没有崩溃。我使用具有权限的管理员帐户运行了此代码。

我面临以下错误。谁能帮我解决此错误的情况?

我按照下面的链接解决此问题。

OpenFileMapping ERROR_FILE_NOT_FOUND

尝试在对象名称前面加上 Global\ 前缀,如下所示:https://learn.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory