Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dll zur lauzeit Einbinden (https://www.delphipraxis.net/134810-dll-zur-lauzeit-einbinden.html)

Sir K 29. Mai 2009 13:23


Dll zur lauzeit Einbinden
 
Hallo alle miteinander xD,

ich hab ein kleines Problem undd zwar möchte ich ein dll zu Laufzeit einbinden und bekomme bein aufruf immer die compilermeldung "nicht genügen wirkliche Parameter".

Schnittstell in einer ExtraUnit:
Delphi-Quellcode:
type
  TDeleteKey = function(AKey: PChar): Boolean; stdcall;
  function dllDeleteKey(AKey: PChar): Boolean;


implementation

function dllDeleteKey(AKey: PChar): Boolean;
var
  DeleteKey: TDeleteKey;
  Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(gsPfmRegistry));
  if Handle <> 0 then
    begin
      @DeleteKey:=GetProcAddress(Handle, 'DeleteKey');
      if @DeleteKey <> nil then
        Result:=DeleteKey(AKey);
      FreeLibrary(Handle);
    end;
end;
Aufruf:
Delphi-Quellcode:
if pfmRegistry.TDeleteKey(PChar('Hallo')) then
    ShowMessage('Funktioniert')
  else
    ShowMessage('Funktioniert nicht');
lg

Sir K

NormanNG 29. Mai 2009 13:25

Re: Dll zur lauzeit Einbinden
 
Hi,

du musst die Funktion aufrufen und nicht den Typ

Delphi-Quellcode:
if dllDeleteKey(PChar('Hallo')) then
    ShowMessage('Funktioniert')
  else
    ShowMessage('Funktioniert nicht');

Sir K 29. Mai 2009 13:39

Re: Dll zur lauzeit Einbinden
 
Achsoo... ok alles klar Danke!!

lg

Sir K

Sir K 29. Mai 2009 13:53

Re: Dll zur lauzeit Einbinden
 
Ok hab mir das jetzt mal angesehn und was merkwürdiges festgestellt.

Diese routine wird beim aufruf immer wieder ausgeführt, bis die Meldung eine StackOverFlow exception auftritt.
Weis jemand woran das liegt?

heíer nochmal die routine:
Delphi-Quellcode:
function DeleteKey(AKey: PChar): Boolean;
var
  ltDeleteKey: TDeleteKey;
  lhHandle: THandle;
begin
  lhHandle:=LoadLibrary(PChar(gsPfmRegistry));
  if lhHandle <> 0 then
    begin
      @ltDeleteKey:=GetProcAddress(lhHandle, 'DeleteKey');
      if @ltDeleteKey <> nil then
        Result:=DeleteKey(AKey);
      FreeLibrary(lhHandle);
    end;
lg

Sir K

Angel4585 29. Mai 2009 14:00

Re: Dll zur lauzeit Einbinden
 
Erklär doch mal was deiner Meinung nach da Zeile für Zeile passiert und warum es abbrechen sollte.

Die Methode ruft sich schliesslich immerwieder selbst auf.

Sir K 29. Mai 2009 14:15

Re: Dll zur lauzeit Einbinden
 
...oh da hät ich auch selbst drauf kommen können :wall:

naja Danke!!!

lg

Sir K


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr.

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