AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dll zur Laufzeit verändern?

Ein Thema von StanY · begonnen am 27. Okt 2004 · letzter Beitrag vom 9. Nov 2004
Antwort Antwort
Seite 2 von 2     12   
tommie-lie
(Gast)

n/a Beiträge
 
#11

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:28
Zitat von StanY:
Delphi-Quellcode:
procedure TfrmMain.LoadDll(DllName: String);
var
  Handle: THandle;
begin
  //Dll wird nun eingebunden
  Handle := LoadLibrary(PChar(DllName));
  if (Handle <> 0) then begin
    GetCommand := GetProcAddress(Handle,'GetCommand');
  end;
  FreeLibrary(Handle); // <---
end;
Na du bist lustig, gibst die Bibliothek wieder frei, bevor du sie aufrufst
Du kannst entweder FreeLibrary() ganz weglassen, Windows kümmert sich beim Beenden des Programmes automatisch um das freigeben aller Ressourcen, auch der DLLs. Da das aber in deinem Fall nicht praktikabel ist, solltest du das Handle der DLL als globale Variable deklarieren und eine zusätzliche UnloadDLL() implementieren, die das Handle mit FreeLibrary wieder freigibt. Dann kannst du in deinem Programm mit LoadDLL(URLfuerDLL) die DLL laden und mit UnloadDLL() wieder entladen und gleich darauf eine andere DLL laden.
Du musst nur sicher gehen, daß zwischen dem Entladen und dem Laden der DLL keine Funktion aus dieser DLL aufgerufen wird.
  Mit Zitat antworten Zitat
StanY

Registriert seit: 5. Aug 2004
145 Beiträge
 
#12

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:37
Mh, aber ich würde es gerne so machen, dass er die DLL bei Programm start lädt, und beim Beenden wieder entlädt. (Wird ja automatisch gemacht)

Desweiteren soll er, wenn er den Befehl bekommt, die DLL während des Laufens neu laden.

Sie soll aber permanent verwendbar sein.

Wie geht das? - Ich hoffe ihr versteht was ich meine \:

Btw. Ich dachte, das Handle ist nur wichtig, um die DLL zu laden... nicht, um sie zu erhalten.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#13

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 16:50
Zitat von StanY:
Mh, aber ich würde es gerne so machen, dass er die DLL bei Programm start lädt, und beim Beenden wieder entlädt. (Wird ja automatisch gemacht)

Desweiteren soll er, wenn er den Befehl bekommt, die DLL während des Laufens neu laden.
Dein erster Wunsch und dein zweiter widersprechen sich doch ein ganz klein wenig, oder?
Du kannst natürlich auch das alte Handle nicht freigeben und immer weiter neue DLLs laden, je nachdem wie oft du das machst geht dir dann aber mit der Zeit der virtuelle Adressbereich aus, um eine DLL zu laden.
Es empfiehlt sich daher bei plugin-artigen Konstruktionen (wie das hier ja eine ist), die DLL vor dem erneuten Laden zu entladen, damit die alte DLL nicht mehr im Speicher gehalten werden muss.

Zitat von StanY:
Sie soll aber permanent verwendbar sein.
Solange die DLL nicht geladen ist, kann man sie nicht anwenden.

Zitat:
Wie geht das?
Beim Programmstart die Standard-DLL laden und wenn dann im Laufe des Programmes die DLL gewechselt werden soll, erst die alte entladen und anschließend die neue laden.

Zitat von StanY:
Btw. Ich dachte, das Handle ist nur wichtig, um die DLL zu laden... nicht, um sie zu erhalten.
Ist es auch, das Handle kannst du nach dem Laden wegwerfen und brauchst es nie wieder, wenn du Windows die DLL automatisch freigeben lässt. Aber du hast ja mit FreeLibrary die DLL gleich wieder aus dem Speicher rausgeschmissen, nachdem du die Funktionen zugewiesen hast. Und wie soll etwas aufgerufen werden, was nicht mehr im Speicher ist?
  Mit Zitat antworten Zitat
StanY

Registriert seit: 5. Aug 2004
145 Beiträge
 
#14

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 17:03
Danke, es geht nun (:

Und wenn man es versteht, sit es auch irgendwie ganz einfach \: <:
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#15

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 17:18
Zitat von StanY:
Und wenn man es versteht, sit es auch irgendwie ganz einfach \: <:
Stimmt, ist mit allen Dingen so
  Mit Zitat antworten Zitat
StanY

Registriert seit: 5. Aug 2004
145 Beiträge
 
#16

Re: Dll zur Laufzeit verändern?

  Alt 27. Okt 2004, 17:26
Kann ich mit einer Dll eigentlich auf Componenten im Main-Programm zugreifen? oO

Mh, ich frage, und probiere nicht selber, weil wenn nicht, lohnt sich ne DLL gar nicht.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von maximus Caesar
maximus Caesar

Registriert seit: 26. Sep 2004
Ort: Biberach
319 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Dll zur Laufzeit verändern?

  Alt 9. Nov 2004, 18:37
Dazu verwendest am besten OOP! Schreibst ein Objekt, das bei dll und Hauptprogramm gleich ist, und lässt es dir über ne Funktion der dll komplett zurückliefern!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 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