OpenFileMapping.GetLastError=2 GetLastError=2

问题描述 投票:0回答:1

我试图在两个进程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(错误)

c++ winapi shared-memory citrix
1个回答
0
投票

试试像这里说的那样,在对象名前加上Global。https:/docs.microsoft.comen-uswindowswin32memorycreating-name-shared-memory

© www.soinside.com 2019 - 2024. All rights reserved.