Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

перевести тип с С++ на Delphi   Найти похожие ветки 

 
ph0sgen ©   (2006-09-14 20:22) [0]

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

у меня такой вопрос:
необходимо перевести на 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;


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


 
Delf ©   (2006-09-15 09:16) [1]

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


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


> ph0sgen


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


 
han_malign ©   (2006-09-15 09:46) [3]

   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 (указатель он и в Африке указатель)...



Страницы: 1 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
15-1157796716
ArtemESC
2006-09-09 14:11
2006.10.01
Как нарисовать одноцветную линию и одноцветн. треугольник?


15-1157694691
Рамиль
2006-09-08 09:51
2006.10.01
Однако.


15-1158064876
Некто
2006-09-12 16:41
2006.10.01
А у нас тут взрыв в соседнем доме.... сидим, боимся....


2-1157964000
kirik
2006-09-11 12:40
2006.10.01
Шо за фигня с треем?


15-1157957457
Neo Trinitron
2006-09-11 10:50
2006.10.01
PowerDesigner