MemoryStream 中文件的句柄 (Delphi)

THandle of File in MemoryStream (Delphi)

我在内存流中加载了一个文件,想获取它的文件句柄而不将文件保存在硬盘上。

我不知道该怎么做。

它应该return 与 CreateFile 的结果相同。

  myFile:= CreateFile('myfile.exe', GENERIC_READ, FILE_SHARE_READ...

我尝试使用 memorystream 的 Memory 属性,但它 return 与 CreateFile

的句柄不同
  mem_stream := TMemoryStream.Create;
  mem_stream.LoadFromFile('myfile.exe');
  mem_hFile := mem_stream.Memory;
  Writeln(Format('mem_hFile: %d', [mem_hFile]));
  mem_stream.Free;

内存流没有与之关联的文件句柄。您不能将内存流与任何需要文件句柄的函数一起使用。

无论您的问题是什么,从内存流中获取文件句柄是不可能的,这不是解决方案。

你好像也对句柄的数值有误解。如果两个句柄指向同一个对象,则不能比较两个句柄的数值并期望它们具有相同的值。两个不同的文件句柄具有不同的数值,即使它们引用相同的值。

I have a file loaded in a memorystream and want to get the filehandle of it without saving the file on the harddisk.

TMemoryStream 中没有文件句柄。您所做的是将文件字节的 copy 加载到内存块中。 TMemoryStream.Memory 属性 returns 指向该内存块的指针。

It should return the same result as CreateFile does.

然后你必须直接或间接地实际调用 CreateFile(),例如使用 TFileStream:

fs_stream := TFileStream.Create('myfile.exe', fmOpenRead or fmShareDenyWrite);
fs_hFile := fs_stream.Handle; // <-- returns the HANDLE from CreateFile()
...
fs_stream.Free;