AGB  ·  Datenschutz  ·  Impressum  







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

[DLL]Daten weg nach FreeLibrary

Ein Thema von Profiler · begonnen am 23. Apr 2009 · letzter Beitrag vom 25. Apr 2009
 
Profiler

Registriert seit: 30. Dez 2006
14 Beiträge
 
#1

[DLL]Daten weg nach FreeLibrary

  Alt 23. Apr 2009, 18:43
Hallo,

ich bin mir nicht sicher ob das Thema am besten hierher passt, also schon mal Sorry falls es fehl platziert wurde. Ich beschäftige mich gerade mal wieder mit einer Art Plug-In-System für mein Lüftersteuerungsprogramm PFControl für ThinkPad-Notebooks.
Die jeweiligen DLL's sollen eine Standard-Routine besitzen, dir mir Informationen über sie gibt (Autor, Version, ...). Dabei soll die DLL dynamisch geladen, die Informationen gelesen und im Speicher hinterlegt, und wieder freigegeben werden. In meiner DLL befindet sich also folgende Funktion:

Delphi-Quellcode:
function GetDllInformation: TDllInformation;
begin
  Result.Author := 'Max Mustermann';
  Result.Version := 'v0.2';
  Result.Name := 'Standard-Signale';
end;
Diese Funktion wird exportiert und in meinem Hauptprogramm folgendermaßen aufgerufen:
Delphi-Quellcode:
...
  TFunctionGetDllInformation = function: TDllInformation;
...
    fInfo: TDllInformation;
...
constructor TDll.Create(FileName: String);
var
  Func: TFunctionGetDllInformation;
begin
  Inherited Create;
  fFileName := FileName;
  fDllHandle := 0;
  Load;
  Func := LoadFunction(DLL_GETINFO);
  fInfo := Func;
  Unload; /* Marke 1 */
  fLoaded := False; /* Marke 2 */
end;

procedure TDll.Load;
begin
  fDllHandle := LoadLibrary(PChar(fFileName));
  if fDllHandle = 0 then
    raise Exception.Create('"'+fFileName+'" konnte nicht geladen werden!');
  fLoaded := True;
end;

function TDll.LoadFunction(Name: String): Pointer;
begin
  try
    Result := GetProcAddress(fDllHandle, PChar(Name));
  except
    on E: Exception do
      raise Exception.Create('"'+fFileName+'" ist keine gültige Dll für PFControl: '+E.Message);
  end;
end;

procedure TDll.UnLoad;
begin
  if fLoaded then begin
    FreeLibrary(fDllHandle);
    fLoaded := False;
  end;
end;
Zunächst funktioniert alles perfekt bis /* Marke 1 */ im Konstruktor. Wenn die Prozedur Unload noch nicht aufgerufen wurde, stehen in fInfo (Struktur) die gewünschten Daten. Nachdem Unload aufgerufen wurde (/* Marke 2 */), ist fInfo im Debugger nicht mehr lesbar und die Daten sind weg. Wieso bleiben die Daten beim Freigeben der DLL nicht erhalten bzw. wie kann ich es so lösen ohne die DLL dauerhaft im Speicher zu lassen?

Ich nutze Borland Delphi 7 unter Windows XP.

Gruß
Profiler
  Mit Zitat antworten Zitat
 


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 14:17 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