内存映射阅读器找不到全局内存映射对象
Posted
技术标签:
【中文标题】内存映射阅读器找不到全局内存映射对象【英文标题】:Memory Map reader cannot find Global Memory Mapped Object 【发布时间】:2019-05-05 22:22:28 【问题描述】:我正在编写一个创建和写入内存映射文件的 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 对象。谁能帮帮我?
【问题讨论】:
【参考方案1】:问题是您似乎在打开和关闭它(并释放资源)。
using (MemoryMappedFile _mmf = MemoryMappedFile.CreateNew(...))
// here you have just released all the resources
如果您想与其他进程共享此文件,则需要保持打开状态
【讨论】:
哦,好的,我明白了。所以如果我想让它保持打开状态,我可以在括号内添加一个事件处理程序吗?或者有合适的方法吗? @Hayden 不,您可能不会使用 using 语句,并在不同的时间关闭并处置_mmf
好的,谢谢。我在不使用语句的情况下重写了它,它正在工作。以上是关于内存映射阅读器找不到全局内存映射对象的主要内容,如果未能解决你的问题,请参考以下文章