Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перевести тип с С++ на Delphi


ph0sgen ©   (2006-09-14 20:22:00) 

Доброго времени суток, уважаемые мастера.

у меня такой вопрос:
необходимо перевести на Delphi следующее:

typedef struct _DnsRecord
{
   struct _DnsRecord * pNext;
   LPTSTR              pName;
   WORD                wType;
   WORD                wDataLength;
                                   
   union
   {
       DWORD               DW;    
       DNS_RECORD_FLAGS    S;      // flags as structure

   } Flags;

   DWORD               dwTtl;
   DWORD               dwReserved;

   //  Record Data

   union
   {
       DNS_A_DATA      A;
       DNS_SOA_DATA    SOA, Soa;
       DNS_PTR_DATA    PTR, Ptr,
                       NS, Ns,
                       CNAME, Cname,
                       MB, Mb,
                       MD, Md,
                       MF, Mf,
                       MG, Mg,
                       MR, Mr;
       DNS_MINFO_DATA  MINFO, Minfo,
                       RP, Rp;
       DNS_MX_DATA     MX, Mx,
                       AFSDB, Afsdb,
                       RT, Rt;
       DNS_TXT_DATA    HINFO, Hinfo,
                       ISDN, Isdn,
                       TXT, Txt,
                       X25;
       DNS_NULL_DATA   Null;
       DNS_WKS_DATA    WKS, Wks;
       DNS_AAAA_DATA   AAAA;
       DNS_KEY_DATA    KEY, Key;
       DNS_SIG_DATA    SIG, Sig;
       DNS_ATMA_DATA   ATMA, Atma;
       DNS_NXT_DATA    NXT, Nxt;
       DNS_SRV_DATA    SRV, Srv;
       DNS_TKEY_DATA   TKEY, Tkey;
       DNS_TSIG_DATA   TSIG, Tsig;
       DNS_WINS_DATA   WINS, Wins;
       DNS_WINSR_DATA  WINSR, WinsR, NBSTAT, Nbstat;

   } Data;
}
DNS_RECORD, *PDNS_RECORD;


благодарю за внимание.


han_malign   (2006-09-15 09:46:00) [1]

   union
  {
      DWORD               DW;    
      DNS_RECORD_FLAGS    S;      // flags as structure

  } Flags;

- придется описать отдельным типом, т.к. в Delphi объединение можно определять только в конце рекорда.
type
  TFlags = packed record
  case byte of
  0: (DW: DWORD);
  1: (S: DNS_RECORD_FLAGS);
  end;


union{}Data - можно реализовать прямо в целевом record-е, но для сохранения доступа вида rec.Data.WinsR - тоже лучше отдельным типом..

ссылка на "самого себя" делается форвардным объявлением типа(специально для таких случаев было сделано исключение из правил для однопроходного компилятора)
type
    PDNS_RECORD= ^DNS_RECORD;//DNS_RECORD - форвардная ссылка - должно быть в одной секции type с полным описанием типа
   DNS_RECORD = packed record
        pNext: PDNS_RECORD;
        ..................
        Flags: TFlags;
        ..................


LPTSTR - придется делать руками
type
{$IFDEF UNICODE}
    LPTSTR = PWideChar;
{$ELSE}
    LPTSTR = PChar;
{$ENDIF}

{$DEFINE UNICODE} - тоже надо прописывать самому - в Delphi таких глобальных переключателей нет...
Хотя - можно, ничтоже сумняшеся, описать как PChar и где(если) надо привести к PWideChar (указатель он и в Африке указатель)...


Сергей М.   (2006-09-15 09:41:00) [2]


> ph0sgen


А в чем проблема ?


Delf   (2006-09-15 09:16:00) [3]

Интересно где такая жуть водится?
:-)


Наверх

Титульная страница Поиск, карта сайта Написать письмо