Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Объявление 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
2-1179516298
LoRd1
2007-05-18 23:24
2007.06.10
Запуск програмы на выполнение


2-1179801041
ALEX][ANDR
2007-05-22 06:30
2007.06.10
ТАЙМЕР


2-1179841963
Vazhik
2007-05-22 17:52
2007.06.10
Вывод данных из файла


15-1179344956
Суслик
2007-05-16 23:49
2007.06.10
CVS vs SVN


15-1179299898
zdm
2007-05-16 11:18
2007.06.10
Нужен Хэлп





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский