Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.09;
Скачать: CL | DM;

Вниз

Реестр   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2003.06.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
1-26467
Andryushka
2003-05-27 17:01
2003.06.09
Надо сделать CRC32 любого файла равной 0


14-26710
Лис
2003-05-21 18:40
2003.06.09
Парни, объясните чайнику как в Дельфи добраться до прерываний!


6-26639
vinnety
2003-04-08 21:35
2003.06.09
Сокеты в Дельфи


3-26356
Dimaz-z
2003-05-19 22:02
2003.06.09
Проблема с упаковкой таблицы!!! Помогите пожалуйста!


1-26531
dfgdfgsdg
2003-05-27 21:06
2003.06.09
Как активировать форму?