![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реестр
andrej © (2003-04-08 12:27:00)Здравствуйте, подскажите, что неправильно
Ключ открывается, считать строку не выходит
procedure TForm1.Button1Click(Sender: TObject);
const
Key : String = "key";
var
s : string;
Key1 : hkey;
D1,D2 : Integer;
Value : string;
begin
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, key ,0, Key_Read,Key1)= Error_Success) Then begin
if (RegQueryValueEx(Key1,"home",nil,@D1,@Value,@D2) = Error_Success) then begin
s := Value;
end;
end;
RegCloseKey(Key1);
end;
Спасибо
andrej (2003-04-11 11:29:00) [1]Cobalt - захотелось попробовать, извини за назойливость. Размер программы - 25 кб при использовании Classes - 67 кб
Cobalt (2003-04-10 19:12:00) [2]ну, блин, извини: PByte(path).
Слушай, а зачем ты вообще-то на чистом API пишешь? На сколько же больше прога становится больше с модулем Classes?
andrej (2003-04-10 08:57:00) [3]Cobalt, ты предлагаешь заменить @path[1] на PChar(path). Даже не компилируется. Что не так? Исправь пожалуйста строку
if (RegQueryValueEx(Key1,"home",nil,@D1,pchar(path),@D2) = Error_Success)
Результата я добился, но хочется знать почему этот вариант не работает
var
s,path :string;
begin
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Cboss\Instances\smol\general" ,0, Key_Read,Key1)= Error_Success) Then begin
d2 := 20;
setlength(path,20)
if (RegQueryValueEx(Key1,"home",nil,@D1,pchar(path),@D2) = Error_Success) then begin
s := path;
end;
end;
end;
Cobalt (2003-04-09 18:22:00) [4]2 andrej
Если пишешь на чистом API, то внимательночитай документацию
З.Ы. @path[1] ->PChar(path). !!!
Игорь Шевченко (2003-04-09 17:31:00) [5]Вообще-то желательно приводить еще и объявление всех переменных.
andrej (2003-04-09 17:20:00) [6]
2 варианта (массив char и string)
Согласись что со строкой получилось не так как мне подсказывали
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Cboss\Instances\smol\general" ,0, KEY_read,Key1)= Error_Success) Then begin
d2 := 40;
setlength(path,40);
//с массивом v - char
if (RegQueryValueEx(Key1,"home",nil, @d1, @v, @D2) = Error_Success) then begin
path := v ;
end;
// path - тип string
if (RegQueryValueEx(Key1,"home",nil, @d1, @path[1], @D2) = Error_Success) then begin
path := pchar(path);
end;
end;
Anatoly Podgoretsky (2003-04-09 16:30:00) [7]Приведи последнею версию твоего кода.
andrej (2003-04-09 13:52:00) [8]Cobalt - программа пишется только на API
Anatoly - все перепробовал и длину строки указал и сколько байт
вешать указал. Получилось только при использовании массива char
Anatoly Podgoretsky (2003-04-09 00:13:00) [9]Пока я спал тебе уже ответили.
Суть в том что Виндоус ничего не знает про Паскалевские строки и ты должен сам по беспокоиться задав ей длину, можно конечно и PChar указывающий на статический буфер или выделенную память, но не стоит, строки полностью совместимы с PChar.
К тому жу ты не указал функции сколько байт тебе вешать.
Cobalt (2003-04-09 00:00:00) [10]З.Ы. А еще проще - использовать класс TRegistry (незабыть бы нажать F1)
andrej (2003-04-08 14:40:00) [11]DarkGreen "вместо @Value передавай PChar(Value)" ты сам пробовал так писать, ведь не работает
DarkGreen (2003-04-08 14:30:00) [12]Он и так тебе все написал. Зделай своей строке Setlength(Value, 300), а при вызове RegQueryValueEx вместо @Value передавай PChar(Value)
andrej (2003-04-08 14:18:00) [13]Cobalt, если не сложно, напиши правильный вариант, стою на месте
Cobalt (2003-04-08 13:45:00) [14]ИМХО, необязательно. Достаточно установить ей длину (SetLength(Value,300)), и при передаче привести к нужному типу: PChar(Value)
LONG RegQueryValueEx(
HKEY hKey, // handle of key to query
LPTSTR lpValueName, // address of name of value to query
LPDWORD lpReserved, // reserved
LPDWORD lpType, // address of buffer for value type
LPBYTE lpData, // address of data buffer
LPDWORD lpcbData // address of data buffer size
);
P.S. И не забудьте указать размер буфера (строки)
andrej (2003-04-08 13:22:00) [15]Анатолий, переменную Value создать как pchar?
Anatoly Podgoretsky (2003-04-08 12:43:00) [16]Win API ничего не знает про пасскалевсие длинные строки!