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

Вниз

УКАЗАТЕЛИ...   Найти похожие ветки 

 
DN   (2004-05-19 15:40) [0]

Есть у меня структура rgCRLEntry, в Delphi объявлена так:
type
 PCRL_ENTRY = ^CRL_ENTRY;
 CRL_ENTRY = record
   SerialNumber :CRYPT_INTEGER_BLOB;
   RevocationDate :TFILETIME;
   cExtension :DWORD;
   rgExtension :PCERT_EXTENSION;
 end;


А в MSDN пишут про нее так:
rgCRLEntry
Array of pointers to CRL_ENTRY structures. Each of these structures represents a revoked certificate.


typedef struct _CRL_ENTRY {
 CRYPT_INTEGER_BLOB SerialNumber;
 FILETIME RevocationDate;
 DWORD cExtension;
 PCERT_EXTENSION rgExtension;
} CRL_ENTRY,
*PCRL_ENTRY;


Помогите разобраться, если это все-таки массив, хотя...,
то как пройтись по элементам, как в обычном массиве не катит.


 
Ozone ©   (2004-05-19 15:49) [1]

Дык в Си к указателю можно обращаться к к массиву, а в Pascal"е нужно немного извратиться чтобы сделать подобное.

Помню еще на 1-2 курсе нас засталляли делать подобное.


 
DN   (2004-05-19 15:57) [2]

=> Ozone ©   (19.05.04 15:49) [1]
Первый раз встречаюсь, честное слово, если не сложно, поясните как?


 
Курдль ©   (2004-05-19 15:58) [3]


> Помогите разобраться, если это все-таки массив, хотя...,
> то как пройтись по элементам, как в обычном массиве не катит.


var P: PCRL_ENTRY; i: Integer;
begin
 for i := 0 to rgCRLEntry.Count - 1 do
 begin
   P := rgCRLEntry.Items[i];
   P.SerialNumber := "xxx.xxx.xxx.xxx";
   ....
 end;
end;


 
Reindeer Moss Eater ©   (2004-05-19 16:05) [4]

rgExtension - указатель на первый элемент CERT_EXTENSION
cExtension  - кол-во элеменов всего


 
DN   (2004-05-19 16:10) [5]

=> Reindeer Moss Eater ©   (19.05.04 16:05) [4]
это для PCCRL_CONTEXT, а эл-ты отзыва в PCCRL_CONTEXT -> PCRL_INFO -> PCRL_ENTRY;

=> Курдль ©   (19.05.04 15:58) [3]
что-то на Items ругается


 
Reindeer Moss Eater ©   (2004-05-19 16:12) [6]

Там все точно так же.
один член структуры показывает на первый элемент
второй член структуры говорит про кол-во элементов


 
Курдль ©   (2004-05-19 16:14) [7]


> => Курдль ©   (19.05.04 15:58) [3]
> что-то на Items ругается

Это я для списка по привычке привел. Мож на rgCRLEntry[i] отзовется.


 
DN   (2004-05-19 16:24) [8]

:))
первый элемент я вижу, количество тоже определяется :
Pinfo.pCrlInfo.cCRLEntry

Как встать на второй элемент?
прибавить к адресу 1-го размер стр-ры или как????


 
Reindeer Moss Eater ©   (2004-05-19 16:27) [9]

У тебя массив указателей, а не массив структур.
Размер 32 битного указателя в windows забыл?


 
DN   (2004-05-19 17:03) [10]

4 байта вроде, но так тоже не идет:

Pinfo^.pCrlInfo^.rgCRLEntry^:= Pinfo^.pCrlInfo^.rgCRLEntry^+i*4;


 
Курдль ©   (2004-05-19 17:05) [11]

А чё, Делфя отказалась доступаться к элементам массива по индексам? :(


 
WebErr ©   (2004-05-19 17:18) [12]

1) Если указатель PChar, то можно к нему прибавлять любой Integer и снова получать PChar.
2) Чтобы от указателя на один тип перейти к указателю на любой другой тип нужно воспользоваться типом Pointer, т.е.
Byaka := PChar(Pointer(Kaka));
3) Чтобы получить i-й (i=Index) элемент массива по указателю (Ptr), который указывает на начало массива (а-ля С++), нужно выполнить:

function SeekElem(Ptr: Pointer; Index, ElemSize: Integer): Pointer;
begin
 Result := Pointer(PChar(Ptr) + Index*ElemSize);
end;

которая вернёт указатель на нужный элемент.
Note: ElemSize - велечина отведённая под каждый из элементов массива.


 
DN   (2004-05-19 17:24) [13]

а здесь нет массива в явном виде.
так идет, но криво, что-то со смещением???  
Pinfo.pCrlInfo.rgCRLEntry:= PCRL_ENTRY(Integer(Pinfo.pCrlInfo.rgCRLEntry)+4);


 
Reindeer Moss Eater ©   (2004-05-19 17:33) [14]

Не надо увеличивать на четыре типизированные указатели.

Надо иметь Pointer на начальный элемент и шагать прибавляя к нему единицу.


 
WebErr ©   (2004-05-19 17:45) [15]


> WebErr ©   (19.05.04 17:18) [12]

Короче, переходите на С - там это всё удобнее! ...
Без обид! 8)



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

Форум: "Основная";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
1-1084892061
NoName
2004-05-18 18:54
2004.05.30
Перевод из WORD в String


6-1081768676
Геннадий
2004-04-12 15:17
2004.05.30
Как создать вложение при отправке электронного письма? idSMTP


3-1083765179
Dimedrol
2004-05-05 17:52
2004.05.30
Компонент типа DBTreeView


14-1084446906
Layner
2004-05-13 15:15
2004.05.30
мастера! Есть ли кто спец. по сварочным аппаратам?


3-1084245341
Dmitriy Smirnoff
2004-05-11 07:15
2004.05.30
Rave Report in D7





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский