Форум: "WinAPI";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
ВнизРеестр Найти похожие ветки
← →
andrej (2003-04-08 12:27) [0]Здравствуйте, подскажите, что неправильно
Ключ открывается, считать строку не выходит
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;
Спасибо
← →
Anatoly Podgoretsky (2003-04-08 12:43) [1]Win API ничего не знает про пасскалевсие длинные строки!
← →
andrej (2003-04-08 13:22) [2]Анатолий, переменную Value создать как pchar?
← →
Cobalt (2003-04-08 13:45) [3]ИМХО, необязательно. Достаточно установить ей длину (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 14:18) [4]Cobalt, если не сложно, напиши правильный вариант, стою на месте
← →
DarkGreen (2003-04-08 14:30) [5]Он и так тебе все написал. Зделай своей строке Setlength(Value, 300), а при вызове RegQueryValueEx вместо @Value передавай PChar(Value)
← →
andrej (2003-04-08 14:40) [6]DarkGreen "вместо @Value передавай PChar(Value)" ты сам пробовал так писать, ведь не работает
← →
Cobalt (2003-04-09 00:00) [7]З.Ы. А еще проще - использовать класс TRegistry (незабыть бы нажать F1)
← →
Anatoly Podgoretsky (2003-04-09 00:13) [8]Пока я спал тебе уже ответили.
Суть в том что Виндоус ничего не знает про Паскалевские строки и ты должен сам по беспокоиться задав ей длину, можно конечно и PChar указывающий на статический буфер или выделенную память, но не стоит, строки полностью совместимы с PChar.
К тому жу ты не указал функции сколько байт тебе вешать.
← →
andrej (2003-04-09 13:52) [9]Cobalt - программа пишется только на API
Anatoly - все перепробовал и длину строки указал и сколько байт
вешать указал. Получилось только при использовании массива char
← →
Anatoly Podgoretsky (2003-04-09 16:30) [10]Приведи последнею версию твоего кода.
← →
andrej (2003-04-09 17:20) [11]
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;
← →
Игорь Шевченко (2003-04-09 17:31) [12]Вообще-то желательно приводить еще и объявление всех переменных.
← →
Cobalt (2003-04-09 18:22) [13]2 andrej
Если пишешь на чистом API, то внимательно читай документацию
З.Ы. @path[1] ->PChar(path). !!!
← →
andrej (2003-04-10 08:57) [14]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-10 19:12) [15]ну, блин, извини: PByte(path).
Слушай, а зачем ты вообще-то на чистом API пишешь? На сколько же больше прога становится больше с модулем Classes?
← →
andrej (2003-04-11 11:29) [16]Cobalt - захотелось попробовать, извини за назойливость. Размер программы - 25 кб при использовании Classes - 67 кб
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c