首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存映射文件的C#等价代码

内存映射文件的C#等价代码
EN

Stack Overflow用户
提问于 2016-06-28 09:40:27
回答 2查看 1.1K关注 0票数 0

我得到了一个供应商的代码,可以从C#的内存映射文件中读取一些东西,但是由于限制,我需要用Delphi-7语言开发代码。我得到的代码写在下面。

该工具是从硬件模块读取模拟输入。

有谁能帮我在Delphi中找到与C#相当的代码吗?我的C#代码如下-

代码语言:javascript
复制
MemoryMappedFile file = MemoryMappedFile.OpenExisting("MY_SHARED_LOCATION");
MemoryMappedViewAccessor reader = file.CreateViewAccessor();
for (int i = 0; i < 16; i++)
{
         inputByte[i + 1] = reader.ReadByte(i);
}

我找到了与MemoryMappedFile相当的类,但仍然无法在Delphi-7中对部分的其余部分进行编码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-28 14:46:18

内存映射文件是Windows为不同进程共享内存提供的功能。

我目前无法访问Delphi编译器来测试这一点,但它应该会使您走上正确的道路。我还根据您提供的代码示例做了一些假设:您只打算读取数据,只读取16个字节。如果这些代码无效,则必须相应地更改代码。

代码语言:javascript
复制
hFile := OpenFileMapping(FILE_MAP_READ, FALSE, "MY_SHARED_LOCATION");
Win32Check(hFile);
try
  //Buffer must be a byte pointer
  buf := MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 16);
  Win32Check(buf);
  try
    //Use buf^ as you please
  finally
    UnmapViewOfFile(buf);
  end;
finally
  CloseHandle(hFile);
end;

有关各种内存映射API例程的更多信息,请参见以下内容:

https://msdn.microsoft.com/en-au/library/ms810613.aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx

票数 4
EN

Stack Overflow用户

发布于 2016-06-28 11:01:17

"MemoryMappedFile“是一个使用操作系统的内存映射文件特性访问文件内容的类。

在C#下,没有指针,所以它有一个面向流的布局.但是在Delphi下,您有指针,所以您可以很容易地直接使用指针。

在我们的TSynMemoryStreamMapped单元中有一个SynCommons.pas类,它适用于Delphi7(和up),并且执行"MemoryMappedFile“所做的事情。您可以考虑TFileBufferReader或直接考虑TMemoryMap和PByteArray。

但是,如果从开始到结尾读取文件,使用内存映射文件是不值得的。在这种情况下,可以通过使用缓冲流来按块读取文件。如果您的文件不是很大,只需使用TMemoryStream类型的流。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38072558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档