2013-09-26 57 views
0

基本上我有一个使用C++内存映射库创建的二进制文件。我有关于C++中的结构的所有信息。我正在尝试使用c#中的内存映射库来读取该二进制文件。有人可以向我展示任何文章/博客,展示如何实现这一目标?读取C++创建的内存映射文件到c#

我很努力将C++结构映射到c#结构以及读取和映射内容所需的步骤。

在此先感谢。

回答

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))); 

然后,管理的内存,我们“脚”,所以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); 
// ... 
+0

感谢乔纳森。我会尝试一下。你有没有机会知道如何做从C++结构映射到C#结构? http://stackoverflow.com/questions/19019499/mapped-c-struct-to-c-sharp-struct – developer