Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取由c++;变成c# 基本上我有一个二进制文件,它是用C++内存映射库创建的。我有关于C++中结构的所有信息。我试图使用c#中的内存映射库读取该二进制文件。有人能给我看一些文章/博客来说明如何做到这一点吗 P>我努力将C++结构映射到C结构,以及读取和映射内容所需的步骤。_C#_C++_Memory Mapped Files - Fatal编程技术网

读取由c++;变成c# 基本上我有一个二进制文件,它是用C++内存映射库创建的。我有关于C++中结构的所有信息。我试图使用c#中的内存映射库读取该二进制文件。有人能给我看一些文章/博客来说明如何做到这一点吗 P>我努力将C++结构映射到C结构,以及读取和映射内容所需的步骤。

读取由c++;变成c# 基本上我有一个二进制文件,它是用C++内存映射库创建的。我有关于C++中结构的所有信息。我试图使用c#中的内存映射库读取该二进制文件。有人能给我看一些文章/博客来说明如何做到这一点吗 P>我努力将C++结构映射到C结构,以及读取和映射内容所需的步骤。,c#,c++,memory-mapped-files,C#,C++,Memory Mapped Files,提前感谢。首先,用 然后从该流实例化一个。这并不完全是必需的,但可以使处理二进制数据更容易 var reader = new BinaryReader(stream); 接下来,根据结构需要读取尽可能多的字节,如下所示: 然后,我们使用以下方法“锁定”该托管内存,以便GC不会移动它: 最后,我们使用以下方法将该缓冲区转换为托管结构: 不要忘记释放GCHandle: handle.Free(); return theStructure; } 一个包含在泛型函数中的部分的示例 虽然我

提前感谢。

首先,用

然后从该流实例化一个。这并不完全是必需的,但可以使处理二进制数据更容易

var reader = new BinaryReader(stream);
接下来,根据结构需要读取尽可能多的字节,如下所示:

然后,我们使用以下方法“锁定”该托管内存,以便GC不会移动它:

最后,我们使用以下方法将该缓冲区转换为托管结构:

不要忘记释放GCHandle:

handle.Free();

    return theStructure;
}
一个包含在泛型函数中的部分的示例


虽然我还没有尝试过,但我很有信心使用and调用(您可以将其传递给
二进制读取器
)也可以使用它


谢谢你,乔纳森。我会试试看。你是否知道如何从C++结构到C结构?
var bytes = reader.ReadBytes(Marshal.SizeOf(typeof (MyStruct)));
var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
var myStruct = (MyStruct)Marshal.PtrToStructure(
                   handle.AddrOfPinnedObject(), typeof (MyStruct));
handle.Free();

    return theStructure;
}
var mmfile = MemoryMappedFile.CreateFromFile(path);
var stream = mmfile.CreateViewStream();
var reader = new BinaryReader(stream);
// ...