Здравствуйте DenisM, Вы писали:
DM>Здравствуйте Алекс, Вы писали:
А>>Для начала нужно вызвать VarIsArray(). Затем VarArrayLock() для получения указателя на данные. Работаешь на здоровье, а потом вызываешь VarArrayUnlock()
DM>Я пробовал так, еще пробовал вот так:
DM>DM> if VarIsArray( props ) then begin
DM> va := TVariantArg(props);
DM> count := va.parray.rgsabound[ 0 ].cElements;
DM> PropsGrid.RowCount := count + 1;
DM> for i := 0 to count - 1 do begin
DM> j := i;
DM> SafeArrayGetElement( va.parray, j, temp );
DM> PropsGrid.Cells[ 0 , i + 1 ] := temp.pfName;
DM> case temp.pfType of
DM> 2: PropsGrid.Cells[ 1 , i + 1 ] := 'Число';
DM> 3: PropsGrid.Cells[ 1 , i + 1 ] := 'Дата';
DM> else
DM> PropsGrid.Cells[ 1 , i + 1 ] := 'Строка';
DM> end;
DM> end;
DM>
DM>моя структура состоит из 3 полей: pfName, pfValue, pfType
DM>так вот значение возвращается только в поле pfName, остальные пустые
DM>причем, pfName в описании структуры стоит первым, если поменять порядок полей, то вообще ни одно поле не инициализируется
А если под Inspact'ом все посмотреть?
Приведи код как ты его заполняешь.
Че такое TVariantArg() — у меня 5-ый дельфа.
Вместо
count := va.parray.rgsabound[ 0 ].cElements;
лучше пользоваться SafeArrayGetUBound(),SafeArrayGetLBound
И вообще я подумал, что раз уж у тебя в одной структуре умещаются и дата, и строки, число — возьми стандартный VARIANT и не мучься!