Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz