Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriff auf DLL aus DPR-File (https://www.delphipraxis.net/43889-zugriff-auf-dll-aus-dpr-file.html)

slemke76 10. Apr 2005 12:42


Zugriff auf DLL aus DPR-File
 
Hallo,

ich habe (dank dieses Forums :-) ) eine Form in eine DLL ausgelagert.
Jetzt mochte ich dieses Form / diese Funktionen jetzt direkt aus meiner DPR heraus ausführen - es handelt sich um einen Setup-Dialog, der auch direkt beendet werden kann - dann soll das Hauptfenster gar nicht erst zu sehen sein.

In der DPR kann ich aber nicht initialization und finalization verwenden, kann ich diese Befehle dann probelemlos direkt zwischen begin & end setzen ?

Initalization:
Delphi-Quellcode:
  // --- DLL laden ---
  lib := LoadLibrary(@dllname[1]);
  if lib <> 0 then
  begin
    { @SetupDlgShowNormal := GetProcAddress(lib, 'SetupDlgShowNormal'); }
    @SetupDlgShowModal := GetProcAddress(lib, 'SetupDlgShowModal');
  end;
finalization:
Delphi-Quellcode:
  // --- DLL entladen ---
  if lib <> 0 then
    FreeLibrary(lib);
  // --------------------
Grüße

Sebastian

SirThornberry 10. Apr 2005 12:45

Re: Zugriff auf DLL aus DPR-File
 
genau, in der dll das ganze einfach zwischen begin und end machen. Weitere möglichkeite. Binde eine weitere Unit in das dll-projekt ein und verwende dort initialization und finalization.

slemke76 10. Apr 2005 12:51

Re: Zugriff auf DLL aus DPR-File
 
Zitat:

Zitat von SirThornberry
genau, in der dll das ganze einfach zwischen begin und end machen. [...] dll-projekt

Meintest du nicht dpr ? Die DLL läd sich ja nicht selbst ;-)

lg
Sebastian

slemke76 10. Apr 2005 13:46

Re: Zugriff auf DLL aus DPR-File
 
Hi!

So, habe das in der DPR wie folgt gemacht :

Delphi-Quellcode:
program sampleprg;

uses
  Windows, Controls, Dialogs,
  Forms,
  MainUnit in 'MainUnit.pas' {Mainform};

const
  dllname = 'SetupDlg.dll';
  URL ='http://beispiel.url/test.php';

// --- für DLL ---
type
  TFNSetupDlgShowModal = function(parent: Pointer; getURL: PChar): Integer; stdcall;

var
  setupsuccess: integer;
  lib: HMODULE;
  SetupDlgShowModal: TFNSetupDlgShowModal = nil;
// ---------------

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'Beispiel DLL Prog';
  // --- DLL laden & ausführen ---
  lib := LoadLibrary(@dllname[1]);
  if lib <> 0 then @SetupDlgShowModal := GetProcAddress(lib, 'SetupDlgShowModal');
  if Assigned(SetupDlgShowModal) then setupsuccess:=SetupDlgShowModal(nil, PChar(URL))
  else begin
    MessageDlg('DLL "SetupDlg.dll" konnte nicht geladen werden !',mtError,[mbOk],0);
    setupsuccess:=mrCancel;
  end;
  if setupsuccess=mrOK then begin
  // -----------------

    Application.CreateForm(TMainform, Mainform);
    Application.Run;

  // --- DLL entladen ---
  end;
  if lib <> 0 then FreeLibrary(lib);
  // --------------------
end.
Kann man das so machen ?????
Funktionieren tut es, aber das heisst ja nix :wink:

lg

SirThornberry 10. Apr 2005 13:51

Re: Zugriff auf DLL aus DPR-File
 
das was zwischen begin und End steht ist gleich zu setzen mit initialization. Wenn du noch irgendwas wie finalization brauchst musst du die exitproc "überschreiben"(umbiegen)

slemke76 10. Apr 2005 14:04

Re: Zugriff auf DLL aus DPR-File
 
Ah, das bring Licht ins Dunkel.

Wenn ich also die Routinen aus der DLL irgendwo im Hauptformular verwenden wollte/müsste, dann müsste ich besagte Methode überschreiben, weil so wie es jetzt ist, die DLL gleich wieder entladen wird ?

Wie überschreibe ich die Methode ?

lg

SirThornberry 10. Apr 2005 14:07

Re: Zugriff auf DLL aus DPR-File
 
die dll wird erst entladen wenn du "FreeLibraray" aufrufst (falls du die dll überhaupt dynamich eingebunden hast). Bei staaticher einbindung wird die dll erst bei programmende entladen.
Wenn du Procedure aus der DLL-Exportierst ist es eigentich auch nicht notwendig das du was zwischen begin-end schreibst, du könntest ebenso da eine procedure zum initialisieren exportieren und eine um wieder aufzuräumen und diese dann vom hauptprogramm aus beim start/beenden aufrufen.

slemke76 10. Apr 2005 14:12

Re: Zugriff auf DLL aus DPR-File
 
Zitat:

Zitat von SirThornberry
Wenn du Procedure aus der DLL-Exportierst ist es eigentich auch nicht notwendig das du was zwischen begin-end schreibst, du könntest ebenso da eine procedure zum initialisieren exportieren und eine um wieder aufzuräumen und diese dann vom hauptprogramm aus beim start/beenden aufrufen.

Aha - jetzt wirds kompliziert (habe ich doch gestern erst die erste DLL geschrieben) - ich werds aber mal probieren ;-)

lg
Sebastian


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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 by Thomas Breitkreuz