Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-26355
DedMoroz
2003-05-18 21:44
2003.06.09
Paradox


14-26764
microlab
2003-05-23 07:54
2003.06.09
Реляционные базы данных


1-26582
Dmitry_Bondarev
2003-05-28 14:33
2003.06.09
Как сделать разноцветные строки в ListBox?


14-26748
Ihor Osov'yak
2003-05-22 01:17
2003.06.09
Прокси, учет трафика - что посоветуете..


7-26818
mike-d
2003-04-05 15:30
2003.06.09
режим stand-by монитора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский