| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Open array parameters |
| Автор: stab 23.2.2003, 20:11 |
| Есть процедура сохраняет в реестре переданные ей значаения через Open array parameter. Имеется еще одна прцедура для считывания из реестра (приведена ниже), она от чего не работает, т.е. значения читается нормально, но в переменной переданной в Open array parameter значение не сохраняется, что делать? ... и кто виноват? 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. |