Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.094 c
6-1125328100
ctudentnew
2005-08-29 19:08
2005.12.11
Как отправить фото на сервер


3-1130138638
syte_ser78
2005-10-24 11:23
2005.12.11
украинская локализация


2-1132879303
sergey1126
2005-11-25 03:41
2005.12.11
Не все ячейки красяться в stringgride


2-1132550552
Mamur
2005-11-21 08:22
2005.12.11
Обращение из папки которой запускается


14-1132149687
Red_imp
2005-11-16 17:01
2005.12.11
Прикольная задачка но может быть и была она тут тогда извините