如何在C#应用程序中访问此类型的C ++共享内存?

时间:2015-08-10 18:08:04

标签: c# c++ shared-memory

我有一些来自另一个程序员的代码,它使用/创建共享内存,我认为是页面文件。使用的代码是:

HANDLE hMapObject;
HWND hWnd;
float *MapView;
float MapScale[10];
BOOL MapError, MapViewError;
DWORD LastMapError; // shared memory file init
hMapObject = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "GInterface");
if (!hMapObject)
{
    hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof (MapScale), "GInterface");
    if (!hMapObject)
    {
        MapError = true;
        LastMapError = GetLastError();
    }
}
MapView = (float*)MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (!MapView)
{
    MapViewError = true;
    LastMapError = GetLastError();
}

我看过C#的共享内存,但它似乎与我在这里的任何方式无关。我的C#程序只需要从共享内存中读取,如果有帮助就不要写入它。

提前致谢!

1 个答案:

答案 0 :(得分:3)

您应该可以使用

在c#中打开内存映射文件
var mappedFile = System.IO.MemoryMappedFiles.MemoryMappedFile.OpenExisting(MemoryMappedFileRights.Read, "GInterface");

using (Stream view = mappedFile.CreateViewStream())
{
    //read the stream here.
}