Delphi: строка [255] в 32-битной и 64-битной версиях - PullRequest
0 голосов
/ 21 сентября 2019

Я использую следующее для совместного использования короткой строки между 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 Ответ

3 голосов
/ 21 сентября 2019

THandle имеет размер указателя.Так что это 32 или 64 бит в зависимости от платформы.Это объясняет недостающие 4 байта.На самом деле это легко увидеть, если использовать функцию SizeOf в тестовых программах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...