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

Вниз

Объявление variant Record.   Найти похожие ветки 

 
Riply ©   (2007-05-22 04:43) [0]

Здравствуйте !
Допустим, есть такая структура:
type
PItemString = ^TItemString;
TItemString = packed record
 Item: string;
 case integer of
  1: (pData: Pointer);
  2: (Data: DWord);
 end;
Но мне надо поменять порядок объявления в ней.
Что-то такого типа:
TItemString = packed record
 case integer of
  1: (pData: Pointer);
  2: (Data: DWord);
 {end;}//здесь заканчивается case
 Item: string;
 end;
Как правильно переопределить ее ?
P.S.
Очень стыдно.


 
MBo ©   (2007-05-22 08:01) [1]

вариантная часть должна быть последней в записи.
А зачем тебе менять порядок?


 
Однокамушкин   (2007-05-22 08:14) [2]

Только так...

TOneMoreType = packed record
case integer of
 1: (pData: Pointer);
 2: (Data: DWord);
end;

TItemString = packed record
 OneMoreField: TOneMoreType;
 Item: string;
end;


По крайней мере, в исходниках стандартного WinSock.pas аналогичная проблема решается именно так, а уж его-то разработчики, надо думать, знали всё о синтаксисе языка...


 
Riply ©   (2007-05-22 16:59) [3]

> [1] MBo ©   (22.05.07 08:01)
>А зачем тебе менять порядок?
Для "совместимости" с другими. :)
Т.е. нужно, чтобы первые ее n байт можно было
рассматривать как другую(не нами определенную) структуру.
>[2] Однокамушкин   (22.05.07 08:14)
>Только так...
Видимо подобным образом и придется сделать.

Всем спасибо большое !


 
Leonid Troyanovsky ©   (2007-05-22 19:50) [4]


> Riply ©   (22.05.07 16:59) [3]

> Т.е. нужно, чтобы первые ее n байт можно было
> рассматривать как другую(не нами определенную) структуру.

Если этого определения нет у нас, то, собс-но, рассматривать нечего.
Пропускай эти n байт, скажем, определив поле
garbage: array [0..n-1] of byte.

Т.е., в начальном примере выбрать 1 vs 2 невозможно,
а для работы хватит и такого:
TItemString = packed record
 dummy: DWord;
 Item: string;
end;

Однако, не очень понятно, зачем подобная структура нужна.
Предположим, что анализируется буфер с частично
известной структурой, но откуда ж там String?

--
Regards, LVT.


 
Riply ©   (2007-05-22 21:58) [5]

> [4] Leonid Troyanovsky © (22.05.07 19:50)
> Если этого определения нет у нас, то, собс-но, рассматривать нечего.
Вот оно :)
type
 PCRYPT_OID_INFO = ^CRYPT_OID_INFO;
 CRYPT_OID_INFO = record
   cbSize:    DWORD;
   pszOID:    LPCSTR;
   pwszName:  LPCWSTR;
   dwGroupId: DWORD;
   case integer of
     1: (
       dwValue:    DWORD;
       ExtraInfo:  CRYPT_DATA_BLOB);
     2: (
       Algid:      ALG_ID);
     3: (
       dwLength:   DWORD);
 end;


>Однако, не очень понятно, зачем подобная структура нужна.
>Предположим, что анализируется буфер с частично
>известной структурой, но откуда ж там String ?
Пока я изучаю это хозяйство(CryptoAPI),
мне хотелось бы передавать свою структуру с добавленными полями(для теста) :)


 
Leonid Troyanovsky ©   (2007-05-22 23:21) [6]


> Riply ©   (22.05.07 21:58) [5]

> Вот оно :)

А   CRYPT_DATA_BLOB ExtraInfo где?

Сравни свой перевод с http://www.delphi-jedi.org/
wincrypt.pas

> мне хотелось бы передавать свою структуру с добавленными
> полями(для теста) :)

Мне кажется, что это не очень-то реально, даже с учетом cbSize.

--
Regards, LVT.


 
Riply ©   (2007-05-23 03:57) [7]

>[6] Leonid Troyanovsky © (22.05.07 23:21)
>А CRYPT_DATA_BLOB ExtraInfo где?
"Я не имею слов !" (с)
В момоходом-преведенной структуре,
которая практически не имеет никакого отношения к теме разговора,
которая, отнюдь не является "на-каждом-шагу-используемой",
увидеть ошибку, связанную с перестановкой полей ?!
Да... Это что-то ! Моему удивлению нет границ :)

>Сравни свой перевод с http://www.delphi-jedi.org
>wincrypt.pas
wincrypt.pas я там найти не сумела. Нашла только JwaWinCrypt.pas.
Сравнила с ним и с Help-ом к BDS 2006.
Что можно сказать ? У Help-а и Jwa по этому вопросу полное согласие :)
Я использовала следующий перевод:
// The original Pascal code is: WinCrypt.pas, released 28-02-2002  
// The  developer of the Pascal code is                            
// Copyright (C) 2002 Starodub Oleg

>Мне кажется, что это не очень-то реально, даже с учетом cbSize.
Ну и ладно (пока :). Вернемся к этому позже.
Когда научимся (хотя бы родные) структуры правильно определять :)


 
Leonid Troyanovsky ©   (2007-05-23 09:00) [8]


> Riply ©   (23.05.07 03:57) [7]

> Да... Это что-то ! Моему удивлению нет границ :)

Никакой мистики, просто, для начала, я глянул в msdn ;)

> wincrypt.pas я там найти не сумела. Нашла только JwaWinCrypt.

А вот туда я давненько не заглядывал, sorry.

--
Regards, LVT.



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
1-1176236761
Gringoire
2007-04-11 00:26
2007.06.10
Как через программу созданую в Delphi запустить другую программу?


15-1179138344
Knight
2007-05-14 14:25
2007.06.10
Откуда брать имена служб для OpenService?


15-1179299944
noreg
2007-05-16 11:19
2007.06.10
EXCEL стал зеркальным


2-1179850602
Kolan
2007-05-22 20:16
2007.06.10
Что возвращает ClientHeight?


2-1179522833
Пун
2007-05-19 01:13
2007.06.10
Возможно ли в ДБГриде выделить всю строку, а не только ячейку???