Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Procedure in DLL? (https://www.delphipraxis.net/37749-procedure-dll.html)

Bluemeus 9. Jan 2005 18:34


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:
procedure OpenReg(const Key: ShortString);
var reg: TRegistry;
begin
      reg:= TRegistry.Create;
      reg.RootKey:= HKEY_CURRENT_USER;
      reg.OpenKey(Key,true);
end;
und danach wieder schließen ...

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?!

Oxmyx 9. Jan 2005 18:39

Re: Procedure in DLL?
 
In DLLs kannst du nicht ohne weiteres Strings verwenden. Übergebe den Key doch mal per PChar.

Bluemeus 9. Jan 2005 18:42

Re: Procedure in DLL?
 
Zitat:

Zitat von Oxmyx
In DLLs kannst du nicht ohne weiteres Strings verwenden. Übergebe den Key doch mal per PChar.

Strings nicht, aber PChar und Shortstring dachte ich?!

fkerber 9. Jan 2005 18:43

Re: Procedure in DLL?
 
Hi!

Welchen Fehler erhälst du denn?


Ciao Frederic

Bluemeus 9. Jan 2005 18:47

Re: Procedure in DLL?
 
Zitat:

Zitat von fkerber
Hi!

Welchen Fehler erhälst du denn?


Ciao Frederic

Zugriffsverletzung bei Adresse xxx in Modul xxx. Lesen von adresse 00000004

Sprint 9. Jan 2005 18:50

Re: Procedure in DLL?
 
Zitat:

Zitat von Bluemeus
Delphi-Quellcode:
procedure CloseReg;
var reg: TRegistry;
begin
      reg.free;
end;
aber ich erhalte immer einen fehler

Du kannst nichts freigeben, was nicht existiert.

paresy 9. Jan 2005 18:53

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

Bluemeus 9. Jan 2005 18:54

Re: Procedure in DLL?
 
Zitat:

Zitat von Sprint
Zitat:

Zitat von Bluemeus
Delphi-Quellcode:
procedure CloseReg;
var reg: TRegistry;
begin
      reg.free;
end;
aber ich erhalte immer einen fehler

Du kannst nichts freigeben, was nicht existiert.

Ok ... ich fass nochmal zusammen:

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..?!

glkgereon 9. Jan 2005 18:57

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....

Sprint 9. Jan 2005 19:11

Re: Procedure in DLL?
 
Zitat:

Zitat von Bluemeus
könnte mir jmd. den aufbau mal erklären, ob ich stdcall benötige etc..?!

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.

Bluemeus 9. Jan 2005 19:19

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*?

glkgereon 9. Jan 2005 19:21

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

Bluemeus 9. Jan 2005 19:28

Re: Procedure in DLL?
 
Zitat:

Zitat von glkgereon
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

hey, musst mich ja nicht gleich mit boah anquatschen. wenn es dich nervt, dann tut es mir leid, aber ich möchte trotzdem gern wissen, warum

Delphi-Quellcode:
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.
verwendet wird ... und was es bedeutet.

Ist doch kein Verbrechen soetwas wissen zu wollen, oder?!

glkgereon 9. Jan 2005 19:34

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....

glkgereon 9. Jan 2005 19:37

Re: Procedure in DLL?
 
also, zu dem code:

Delphi-Quellcode:
procedure LibraryProc(Reason: Integer);
begin

  case Reason of
    DLL_PROCESS_DETACH: if Assigned(FRegistry) then FRegistry.Free;
  end;

end;
wenn die dll entladen wird, dann wird das registry-objekt freigegeben
Delphi-Quellcode:
exports
  OpenKey, CloseKey;
offizielles exportieren der procedures....
Delphi-Quellcode:
begin
  DllProc := LibraryProc;
end.
ka, ich denke mal die "initialisierung", das die dll "in use" ist


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