基本上我有一个使用c ++内存映射库创建的二进制文件。我在c ++中有关于struct的所有信息。我试图在c#中使用内存映射库读取该二进制文件。有人可以向我展示任何展示如何实现这一目标的文章/博客吗?
我正在努力将c ++结构映射到c#struct以及读取和映射内容所需的步骤。
提前致谢。
答案 0 :(得分:0)
首先,使用FileStream
打开文件。
var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
然后从该流中实例化BinaryReader
。这不是完全必需的,但可以更轻松地处理二进制数据。
var reader = new BinaryReader(stream);
接下来,读入结构需要的字节数,如Marshal.SizeOf
所示:
var bytes = reader.ReadBytes(Marshal.SizeOf(typeof (MyStruct)));
然后,我们" pin"管理内存所以GC不会使用GCHandle.Alloc
:
var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
最后,我们使用Marshal.PtrToStructure
:
var myStruct = (MyStruct)Marshal.PtrToStructure(
handle.AddrOfPinnedObject(), typeof (MyStruct));
不要忘记释放GCHandle:
handle.Free();
return theStructure;
}
Here is一个包含在泛型函数中的部分示例。
虽然我还没有尝试过,但我相信这也适用于使用MemoryMappedFile
并调用CreateViewStream
(您传递给BinaryReader
}。)
var mmfile = MemoryMappedFile.CreateFromFile(path);
var stream = mmfile.CreateViewStream();
var reader = new BinaryReader(stream);
// ...