我正在编写一个 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/