OpenFileMapping:GetLastError = 2

时间:2018-09-18 11:24:43

标签: c++ winapi shared-memory citrix

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

下面是我的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

1 个答案:

答案 0 :(得分:0)

尝试在对象名前加上Global \,就像这里所说的:https://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory