Текущий архив: 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.47 MB
Время: 0.047 c