0
基本上我有一个使用C++内存映射库创建的二进制文件。我有关于C++中的结构的所有信息。我正在尝试使用c#中的内存映射库来读取该二进制文件。有人可以向我展示任何文章/博客,展示如何实现这一目标?读取C++创建的内存映射文件到c#
我很努力将C++结构映射到c#结构以及读取和映射内容所需的步骤。
在此先感谢。
基本上我有一个使用C++内存映射库创建的二进制文件。我有关于C++中的结构的所有信息。我正在尝试使用c#中的内存映射库来读取该二进制文件。有人可以向我展示任何文章/博客,展示如何实现这一目标?读取C++创建的内存映射文件到c#
我很努力将C++结构映射到c#结构以及读取和映射内容所需的步骤。
在此先感谢。
首先,用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)));
然后,管理的内存,我们“脚”,所以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);
// ...
感谢乔纳森。我会尝试一下。你有没有机会知道如何做从C++结构映射到C#结构? http://stackoverflow.com/questions/19019499/mapped-c-struct-to-c-sharp-struct – developer