Re[3]: Проблема с получением SAFEARRAY в Delphi
От: Алекс Россия http://wise-orm.com
Дата: 15.10.02 04:19
Оценка:
Здравствуйте 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 и не мучься!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.