Delphi:32位和64位的String [255]

时间:2019-09-21 12:20:32

标签: delphi

我使用以下代码在2个可执行文件之间共享一个短字符串:

Type
  PInstanceInfo = ^TInstanceInfo;
  TInstanceInfo = packed record
    MainAppHandle: THandle;
    SessionPath: String[255];
  end;
Var MappingHandle: THandle;
    InstanceInfo: PInstanceInfo;

  MappingHandle := CreateFileMapping(INVALID_HANDLE_VALUE,
                                     nil,
                                     PAGE_READWRITE,
                                     0,
                                     SizeOf(TInstanceInfo),
                                     PChar('MyApp'));

  InstanceInfo := MapViewOfFile(MappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TInstanceInfo));
  InstanceInfo^.MainAppHandle := Application.Handle;

我使用SessionPath来存储文件路径。当两个应用程序均为x86或x64时,此方法工作正常,但是当App1为32位且App2为64位时,当我读取字符串时,App2缺少字符串的前4个字符。在这种情况下,ShortString结构有何不同?

1 个答案:

答案 0 :(得分:3)

THandle是指针大小的。因此它是32位还是64位,具体取决于平台。这就解释了丢失的4个字节。实际上,可以通过在测试程序中使用SizeOf函数来轻松地看到这一点。