![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с реестром [D7, XP]
Саша © (2008-07-01 21:20:00)Подскажите, пожалуйста, как проверить существование определенного Строкового параметра в определенной ветке реестра.
Loginov Dmitry (2008-07-02 00:57:00) [1]> Но логика эта довольно странная.
Имхо, не более странная, чем NULL='' у Оракла и Парадокса :)
Что есть, то и используем, и на том спасибо! :)
Сергей М. (2008-07-02 00:48:00) [2]
> Loginov Dmitry © (02.07.08 00:40) [6]
Да, ты прав.
Но логика эта довольно странная.
На месте
else Result := '';
по идее должно было быть
else ReadError(..);
Loginov Dmitry (2008-07-02 00:40:00) [3]> Вот цитата из "генофонда":
Если строковой переменной в реестре нет, то GetDataSize() вернет -1, а функция ReadString() - пустую строку.
Вот недостающий фрагмент функции ReadString():
end
else Result := '';
end;
Сергей М. (2008-07-02 00:20:00) [4]
> У строк не возбуждает
Это почему же ?
Вот цитата из "генофонда":
function TRegistry.GetData(const Name: string; Buffer: Pointer;
BufSize: Integer; var RegData: TRegDataType): Integer;
var
DataType: Integer;
begin
DataType := REG_NONE;
if RegQueryValueEx(CurrentKey, PChar(Name), nil, @DataType, PByte(Buffer),
@BufSize) <> ERROR_SUCCESS then
raise ERegistryException.CreateResFmt(@SRegGetDataFailed, [Name]);
...
function TRegistry.ReadString(const Name: string): string;
var
Len: Integer;
RegData: TRegDataType;
begin
Len := GetDataSize(Name);
if Len > 0 then
begin
SetString(Result, nil, Len);
GetData(Name, PChar(Result), Len, RegData);
if (RegData = rdString) or (RegData = rdExpandString) then
SetLength(Result, StrLen(PChar(Result)))
else ReadError(Name);
Riply (2008-07-01 23:54:00) [5]> [0] Саша (01.07.08 21:20)
> Подскажите, пожалуйста, как проверить существование определенного
> Строкового параметра в определенной ветке реестра.
Зависит от "в определенной ветке реестра".
В общем случае это невозможно (ну пусть будет: "довольно сложно").
Дело в том, что могут быть проблеммы с правами.
Loginov Dmitry (2008-07-01 23:44:00) [6]> При несуществовании значения с запрашиваемым тобой именем
> метод возбудит исключение.
У строк не возбуждает.
Игорь Шевченко (2008-07-01 22:07:00) [7]
> Подскажите, пожалуйста, как проверить существование определенного
> Строкового параметра в определенной ветке реестра.
valueexists ?
Сергей М. (2008-07-01 21:25:00) [8]см. TRegistry.ReadПоБарабануКакойТип()
При несуществовании значения с запрашиваемым тобой именем метод возбудит исключение.