Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реестр


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 ничего не знает про пасскалевсие длинные строки!


Наверх

Титульная страница Поиск, карта сайта Написать письмо