Подскажите как будут реализованы следующие конструкции из Delphi на C++: 1. Код (Text): type OldCode = packed record One: dword; two: word; end; 2. Код (Text): far_jmp = packed record PuhsOp: byte; PushArg: pointer; RetOp: byte; end; 3. Код (Text): PWLX_MPR_NOTIFY_INFO = ^WLX_MPR_NOTIFY_INFO; WLX_MPR_NOTIFY_INFO = packed record pszUserName: PWideChar; pszDomain: PWideChar; pszPassword: PWideChar; pszOldPassword: PWideChar; end; Что значит packet record в Delphi
Цитирую: "Если Record не объявлен как Packed то его поля выравниваются компилятором на некоторую границу, зависящую от версии компилятора и опций компиляции. Делается это для целей оптимизации, потому что доступ к выравненным данным быстрее. Однако во многих случаях это неудачно. Например, если Record записывается в файл или передается по сети то выравнивание придет к увелечению объема передаваемых данных. Кроме того формат этого файла станет зависимым от опций компиляции/версии компилятора, что тоже неудачно. В таких случаях лучше объявлять record как packed."
Код (Text): 2. #pragma pack(push,1) struct far_jmp { char PuhsOp; void* PushArg; char RetOp; }; 3. struct WLX_MPR_NOTIFY_INFO { WCHAR* pszUserName; WCHAR* pszDomain; WCHAR* pszPassword; WCHAR* pszOldPassword; }; typedef WLX_MPR_NOTIFY_INFO *PWLX_MPR_NOTIFY_INFO; #pragma pack(pop) Во втором примере весьма желательно переставить PuhsOp и PushArg, так как PushArg оказывается невыровненным.