![]() |
Procedure in DLL?
hi,
ich möchte eine Procedure, die die registry öffnet, den rootkey öffnet und einen Key, der als const übergeben werden soll, in eine dll auslagern? ungefähr so:
Delphi-Quellcode:
und danach wieder schließen ...
procedure OpenReg(const Key: ShortString);
var reg: TRegistry; begin reg:= TRegistry.Create; reg.RootKey:= HKEY_CURRENT_USER; reg.OpenKey(Key,true); end;
Delphi-Quellcode:
procedure CloseReg;
var reg: TRegistry; begin reg.free; end; aber ich erhalte immer einen fehler ... kann mir jmd. mal erklären, wie ich proceduren in eine dll auslagere?! |
Re: Procedure in DLL?
In DLLs kannst du nicht ohne weiteres Strings verwenden. Übergebe den Key doch mal per PChar.
|
Re: Procedure in DLL?
Zitat:
|
Re: Procedure in DLL?
Hi!
Welchen Fehler erhälst du denn? Ciao Frederic |
Re: Procedure in DLL?
Zitat:
|
Re: Procedure in DLL?
Zitat:
|
Re: Procedure in DLL?
du hast "var reg: TRegistry; " nur lokal definiert.... deswegen kannst du es mit reg.free nicht freigeben, weil es garnicht in der prozedur existiert.
du musst es in der DLL global definieren. außerdem ist das was du in die DLL auslagern willst bestimmt nocht nicht alles!? du willst du bestimmt noch nen wert zurückbekommen? grüße, paresy |
Re: Procedure in DLL?
Zitat:
sagen wir mal, wir lassen die CloseReg Proc. weg ... das ist eh nur eine zeile. aber ich möchte gern die registry mit dem key etc. per OpenReg öffnen können, sprich diese funktion nicht wie bisher per programm sondern per dll aufrufen! könnte mir jmd. den aufbau mal erklären, ob ich stdcall benötige etc..?! |
Re: Procedure in DLL?
du musst erst mal reg: TRegistry global deklarieren
so, wie du es machst, wird alles in openreg schön gemacht, nur bei procedure-ende verschwindet reg im nirvana.... |
Re: Procedure in DLL?
Zitat:
Delphi-Quellcode:
library Project2;
uses Windows, SysUtils, Registry; var FRegistry: TRegistry; {--------------------------------------------------------------------------------------------------} procedure OpenKey(const Key: PChar); begin if not Assigned(FRegistry) then FRegistry := TRegistry.Create; FRegistry.OpenKey(Key, True); end; {--------------------------------------------------------------------------------------------------} procedure CloseKey; begin FreeAndNil(FRegistry); end; {--------------------------------------------------------------------------------------------------} procedure LibraryProc(Reason: Integer); begin case Reason of DLL_PROCESS_DETACH: if Assigned(FRegistry) then FRegistry.Free; end; end; {--------------------------------------------------------------------------------------------------} exports OpenKey, CloseKey; {--------------------------------------------------------------------------------------------------} begin DllProc := LibraryProc; end. |
Re: Procedure in DLL?
ok...ich hab es noch nicht getestet, aerb ich gehe einfach davon aus, es klappt.
dann möchte ich aber gern wissen, wieso ... *nerv*? |
Re: Procedure in DLL?
boah, deine registry war lokal deklariert
wenn openreg zuenmde war verschwand deine variable registry im nirvana deswegen konntest du damit nicht weiterarbeiten hier ist sie jetzt global deklariert, und bleibt somit erhalten |
Re: Procedure in DLL?
Zitat:
Delphi-Quellcode:
verwendet wird ... und was es bedeutet.
procedure LibraryProc(Reason: Integer);
begin case Reason of DLL_PROCESS_DETACH: if Assigned(FRegistry) then FRegistry.Free; end; end; {--------------------------------------------------------------------------------------------------} exports OpenKey, CloseKey; {--------------------------------------------------------------------------------------------------} begin DllProc := LibraryProc; end. Ist doch kein Verbrechen soetwas wissen zu wollen, oder?! |
Re: Procedure in DLL?
nur es wurde in diesem thread schon 2mal klar und deutlich gesagt, und einmal indirekt (man hätte drauf kommen können) :roll:
sollte aber keine beleidigung sein.... |
Re: Procedure in DLL?
also, zu dem code:
Delphi-Quellcode:
wenn die dll entladen wird, dann wird das registry-objekt freigegeben
procedure LibraryProc(Reason: Integer);
begin case Reason of DLL_PROCESS_DETACH: if Assigned(FRegistry) then FRegistry.Free; end; end;
Delphi-Quellcode:
offizielles exportieren der procedures....
exports
OpenKey, CloseKey;
Delphi-Quellcode:
ka, ich denke mal die "initialisierung", das die dll "in use" ist
begin
DllProc := LibraryProc; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz