Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизПолучение предыдущего значения параметра спомошью RegQueryValueEx Найти похожие ветки
← →
The One © (2005-11-26 16:26) [0]Собственно, пытаюсь, зная хендл открытого ключа и имя его параметра получить значение этого параметра. Значение может быть целочисленным, либо строковым.
var Info: TRegDataInfo;
DataType: Integer;
buffer:Pointer;
Len:Integer;
...
RegQueryValueEx(KeyHandle, ValueName, nil, @DataType, PByte(Buffer),@Len);
showmessage(inttostr(integer(@Buffer)));//полагаю, что значение числовое
Ошибки не возникает, но и выбрасываемое сообщением значение - далеко от истинного. Писал код опираясь на TRegistry.ReadInteger, но вот что-то не выходит. Подскажите плиз решение.
← →
begin...end © (2005-11-26 19:40) [1]> The One © (26.11.05 16:26)
А Вы всё с реестром паритесь... :-)
Что возвращает функция? Выделено ли достаточно памяти для буфера Buffer, и почему бы не определить вначале нужный объём, вызвав функцию с Buffer = nil? Зачем "полагать, что значение числовое", если можно посмотреть на DataType?
← →
The One © (2005-11-26 20:51) [2]
> А Вы всё с реестром паритесь... :-)
Угумс. Собственно, это последняя проблемма и можно сдавать курсач )
> Зачем "полагать, что значение числовое", если можно посмотреть
> на DataType?
Полагаю для удобства. Ибо мну нужно будет в событие класса передать указатель на данные и тип. Разбираться что и как будет уже напарник в своей части работы, мне нужно лишь для себя проверить, что я ему подсовываю правильные данные.
> RegQueryValueEx(hKey, lpValueName, nil, @DataType, nil,
> @info.DataSize);
> RegQueryValueEx(hKey, lpValueName, nil, @DataType,
> PByte(@Buffer),@info.DataSize);
> if DataType=REG_DWORD then showmessage(inttostr(integer(Buffer)));
> if DataType=REG_SZ then showmessage(string(@buffer));
Вот так вот вполне работает. Только вот не пойму почему в случае со string-ом приходится ставить собачку иначе EAccessViolation? Заметил, что если использовать PChar(buffer) то опять же все ОК, только вот данные в странной кодировке =)
← →
begin...end © (2005-11-26 21:50) [3]> The One © (26.11.05 20:51) [2]
> Вот так вот вполне работает.
Где выделение памяти для Buffer?
RegQueryValueEx(hKey, lpValueName, nil, @DataType, nil, @info.DataSize);
GetMem(Buffer, info.DataSize);
try
RegQueryValueEx(hKey, lpValueName, nil, @DataType, Buffer, @info.DataSize);
if DataType = REG_DWORD then
ShowMessage(IntToStr(PInteger(Buffer)^))
else if DataType = REG_SZ then
ShowMessage(PChar(Buffer))
finally
FreeMem(Buffer)
end
← →
begin...end © (2005-11-26 22:04) [4]Да, и ещё Remarks для RegQueryValueEx почитайте. Про завершающий нулевой символ.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.038 c