c# - 内存映射读取器找不到全局内存映射对象

标签 c# c++

我正在编写一个 C# 程序来创建和写入内存映射文件。 C++ 程序(从 here 复制粘贴)打开内存映射文件并读取内容。但是,C++程序找不到内存映射文件。

我已将对象名称设置为全局(即“Global\MyMemoryMappedObject”),这是用于创建和打开的两个程序的名称,如发现的那样here但这并没有解决问题。

这是我编写的用于创建和写入 MMF 的 C# 代码

public partial class Form1 : Form
{


    String _szName = "Global\\MyMemoryMappedObject";
    String _szMessage = "Testing";
    int _szSize = 64;

    public Form1()
    {
        InitializeComponent();


    }

    private void InitMemoryMap()
    {
        using (MemoryMappedFile _mmf = MemoryMappedFile.CreateNew(_szName, _szSize, MemoryMappedFileAccess.ReadWriteExecute))
        {
            using (MemoryMappedViewAccessor _accessor = _mmf.CreateViewAccessor(0, _szSize, MemoryMappedFileAccess.Write))
            {
                byte[] textBytes = Encoding.UTF8.GetBytes(_szMessage);
                _accessor.WriteArray(0, textBytes, 0, textBytes.Length);

                lblStatus.Text = "1";
            }
        }
    }

    private void btnMMap_Click(object sender, EventArgs e)
    {
        InitMemoryMap();
    }
}

我希望 C++ 程序能够读取内容,因为它使用相同的对象句柄和偏移量,但它根本找不到开始的 mmf 对象。谁能帮帮我?

最佳答案

问题是您似乎正在打开和关闭它(并释放资源)。

using (MemoryMappedFile _mmf = MemoryMappedFile.CreateNew(...))
{

} // here you have just released all the resources 

如果你想与另一个进程共享这个文件,那么你需要保持它打开

关于c# - 内存映射读取器找不到全局内存映射对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996915/

相关文章:

c++ - 如何在跳过已经添加的数字的同时在数组中添加数字?

c# - ASP MVC - 创建 json 结构

c# - 如何在 C# 中解决 Randomize in place 算法?

c++ - 在开关菜单中将时间方程的 24 小时格式更改为 12 小时格式的 boolean 语句?

C++ 单元测试,模拟对象

c++ - "required from here"声明列表列表时出错

c# - NHibernate IPreUpdateEventListener,IPreInsertEventListener 不保存到数据库

c# - 如何保存到 XML?

c# - 如何保存 bool 变量的播放器偏好设置?

c++ - 使用双端队列在 C++ 中实现循环缓冲区