Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Open array parameters


Автор: stab 23.2.2003, 20:11
Есть процедура сохраняет в реестре переданные ей значаения через Open array parameter. Имеется еще одна прцедура для считывания из реестра (приведена ниже), она от чего не работает, т.е. значения читается нормально, но в переменной переданной в Open array parameter значение не сохраняется, что делать? ... и кто виноват? smile.gif

procedure LoadValues(names, more: array of const);
var
reg: TRegIniFile;
s: String;
i: Integer;
begin

reg := TRegIniFile.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('some key', True);

for i := 0 to High(more) do

case more[i].VType of

vtAnsiString: begin

s := reg.ReadString('some subkey', names[i].VPChar, '');
ShowMessage(s); // выводится считанная строка
String(more[i].VAnsiString) := s;

end;

end;

reg.Free;

end;


...
var
value: String;

LoadValues(['Value Name'], [value]);
ShowMessage(value); // выводится пустая строка

Автор: Dayana 23.2.2003, 20:47
В процедуре тот массив, в который возращается значение должен быть переменный, т.е. перед ним надо поставить var, т.е var more: array of... и он не должен быть массивом констант...

Автор: stab 23.2.2003, 21:08
Тут вся и фишка в том, что он array of const, а если писать var more: array of const, то как тогда передавать Open array parameters, ведь конструктор ['name1', 'name2'] создает константный массив, а он как известно не может передаваться по с использованием var.

ясно что можно все реализовать через обычные массивы, но тогда нельзя будет написать:

case more[i].VType of

vtAnsiString: begin

s := reg.ReadString('some subkey', names[i].VPChar, '');
ShowMessage(s); // выводится считанная строка
String(more[i].VAnsiString) := s;

end;

vtInteger: ... ;

vtClass: ... ;

end;

Автор: Fantasist 25.2.2003, 01:26
Передавай array of variant.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)