Перенос некоторого кода на Delphi в С++

Тема в разделе "WASM.BEGINNERS", создана пользователем Xtriker, 4 дек 2005.

  1. Xtriker

    Xtriker New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2005
    Сообщения:
    1
    Подскажите как будут реализованы следующие конструкции из Delphi на C++:



    1.
    Код (Text):
    1. type
    2.  OldCode = packed record
    3.   One: dword;
    4.   two: word;
    5.  end;
    6.  




    2.
    Код (Text):
    1. far_jmp = packed record
    2.   PuhsOp: byte;
    3.   PushArg: pointer;
    4.   RetOp: byte;
    5.  end;
    6.  




    3.
    Код (Text):
    1. PWLX_MPR_NOTIFY_INFO = ^WLX_MPR_NOTIFY_INFO;
    2. WLX_MPR_NOTIFY_INFO = packed record
    3.   pszUserName: PWideChar;
    4.   pszDomain: PWideChar;
    5.   pszPassword: PWideChar;
    6.   pszOldPassword: PWideChar;
    7.  end;




    Что значит packet record в Delphi
     
  2. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Цитирую:

    "Если Record не объявлен как Packed то его поля выравниваются компилятором на некоторую границу, зависящую от версии компилятора и опций компиляции. Делается это для целей оптимизации, потому что доступ к выравненным данным быстрее. Однако во многих случаях это неудачно. Например, если Record записывается в файл или передается по сети то выравнивание придет к увелечению объема передаваемых данных. Кроме того формат этого файла станет зависимым от опций компиляции/версии компилятора, что тоже неудачно. В таких случаях лучше объявлять record как packed."
     
  3. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    Код (Text):
    1. 2.
    2. #pragma pack(push,1)
    3. struct far_jmp {
    4.   char  PuhsOp;
    5.   void* PushArg;
    6.   char  RetOp;
    7. };
    8.  
    9. 3.
    10. struct WLX_MPR_NOTIFY_INFO {
    11.   WCHAR* pszUserName;
    12.   WCHAR* pszDomain;
    13.   WCHAR* pszPassword;
    14.   WCHAR* pszOldPassword;
    15. };
    16. typedef WLX_MPR_NOTIFY_INFO *PWLX_MPR_NOTIFY_INFO;
    17. #pragma pack(pop)




    Во втором примере весьма желательно переставить PuhsOp и PushArg, так как PushArg оказывается невыровненным.