Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];
ВнизRegQueryValueEx Найти похожие ветки
← →
DillerXX © (2005-11-22 21:10) [0]Написал неправильный код для работы с реестром, работает он только в самой программе, а в длл нет.
{$APPTYPE CONSOLE}
uses Windows;
var ddSize:PDWORD;
s:string;
key:HKEY;
begin
SetLength(s,1024);
// new(ddSize);
RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion",Key);
RegQueryValueEx(Key, "WallPaperDir", nil, nil, pbyte(s), ddSize);
delete(s,ddSize^,length(s)-ddSize^+1);
writeln(s);
readln;
end.
Если раскомментировать строчку new(ddSize) то ошибки в длл выдаваться не будет, но тогда будет возвращаться пустая строка. Помогите, какой код будет правильным?
← →
umbra © (2005-11-22 21:25) [1]
> ddSize:PDWORD;
Это указатель, и значит перед тем, как передать его в функцию, ему надо присвоить адрес чего-то (точнее - адрес переменной, содержащей длину записываемой информации). У Вас эта переменная не инициализируется нигде.
> // new(ddSize);
Это выражение выделяет память под DWORD, заполняет ее нулями и присваивает ее адрес переменнойddSize
. Поэтому если его раскомментировать, тоRegQueryValueEx
вернет пустую строку, поскольку просили 0 байт
← →
umbra © (2005-11-22 21:27) [2]var ddSize:PDWORD;
s:string;
key:HKEY;
begin
SetLength(s,1024);
new(ddSize);
ddSize^ := 1024; RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion",Key);
RegQueryValueEx(Key, "WallPaperDir", nil, nil, pbyte(s), ddSize);
delete(s,ddSize^,length(s)-ddSize^+1);
writeln(s);
readln;
end.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.048 c