1,183
社区成员




uses Registry,Classes;
procedure RegReadAllKey(RootPath:Cardinal;OpenPath:pChar;YN:boolean;const List:TStringList);
implementation
procedure RegReadAllKey(RootPath:Cardinal;OpenPath:pChar;YN:boolean;const List:TStringList);
var Reg:TRegistry;
begin
Reg:=TRegistry.Create;
try
with Reg do
begin
RootKey:=RootPath;
if OpenKey(OpenPath,YN) then
GetKeyNames(List);
end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
var
Form1: TForm1;
Th:Thandle;
type
TRegReadAllKey=procedure(RootPath:Cardinal;OpenPath:pChar;YN:boolean;const List:TStringList);
implementation
{$R *.dfm}
procedure ReadRegAllKey(RootPath:Cardinal;OpenPath:string;YN:boolean;const List:TStringList);
var Func:TRegReadAllKey;
begin
if Th>0 then
try
begin
@Func:=GetProcAddress(Th,PChar('RegReadAllKey'));
if @Func<>nil then
Func(RootPath,pChar(OpenPath),YN,List);
end;
finally
//FreeLibrary(Th);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var TempList:TStringList;
i:integer;
begin
TempList:=TStringList.Create;
ReadRegAllKey(HKEY_LOCAL_MACHINE,'SOFTWARE',false,TempList);//为什么调用dll后会出现内存泄漏呢?
for I := 0 to TempList.Count - 1 do
memo1.Lines.Add(TempList[i]);
TempList.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Th:=LoadLibrary('test.dll');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeLibrary(Th);
end;