Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   PlugIn-System (https://www.delphipraxis.net/155895-plugin-system.html)

Tossi 14. Nov 2010 13:24

AW: PlugIn-System
 
Hey,
echt super, dass Ihr alle mitmacht. Mir ist da eine Idee gekommen. Nur die Umsetzung??

In der Exe habe ich eine globale StringListe. Wenn ich mein Modulverzeichnis scanne und alle Module lade merke ich mir
Modulname und den Zeiger. Im LoadLirary wird dann für jede Form die initialization aufgerufen. Kann ich nicht hier etwas machen, um die Formulare auch in einer Liste zu haben?? Leider habe ich im Initialization noch kein Zugriff auf die Klasse oder??

Tossi65 15. Nov 2010 16:59

AW: PlugIn-System
 
So ein Problem gelöst nu kommt ein neues.
Delphi-Quellcode:
procedure LadeModule;
var
  StrPfad: String;
  StrSuchPfad: String;
  SR: TSearchRec;
  FileAttrs: Integer;
  AHandle : Cardinal;
begin
  StrPfad := IncludeTrailingPathDelimiter( ExtractFilePath(ParamStr(0)))+ 'Module\';
  FileAttrs:= faAnyFile;
  StrSuchPfad := StrPfad + '*.mod';
  if FindFirst(StrSuchPfad, FileAttrs, SR) = 0 then
  begin
    repeat
      try
        if (SR.Attr and FileAttrs) = SR.Attr then
        begin
  //        AHandle := LoadLibraryEx(PChar(StrPfad + Sr.Name),0,LOAD_LIBRARY_AS_DATAFILE);
          AHandle := LoadLibrary(PChar(StrPfad + Sr.Name));
          if AHandle > 0 then
          begin
            FModulListe.AddObject(Sr.Name,Pointer(AHandle));
            //Warum kracht es hier bei LoadLibrary??
            FreeLibrary(AHandle);
          end;
        end;
      except

      end;
    until FindNext(SR) <> 0;
    //Warum kracht es hier??
    FindClose(SR);
  end;
end;
Ich lade meine Module in eine Liste. Eigentlich kein Problem. Ich muss eigentlich mit LoadLibrary benutzen, damit die Initialisierung in den Forms der Module aufgerufen wird. So werden Die Forms in eine 2. Liste aufgenommen. Bis hierher
geht alles aber dann mit FreeLibrary() kommt dann eine Fehler bei Ardesse 000000!?!?!?!?!

Auch wenn ich die Registrierung im Modul ausmache. Mit LoadLibraryEx kommte der Fehler nicht.

Und dann kracht es bei FindClose mit "ungültiger Zeiger".

Kein Plan

implementation 15. Nov 2010 17:13

AW: PlugIn-System
 
Zitat:

Zitat von Tossi65 (Beitrag 1061649)
Delphi-Quellcode:
            //Warum kracht es hier bei LoadLibrary??
            FreeLibrary(AHandle);

Ähem, wenn du FreeLibrary hier schon aufrufst, dann kann es nachher nur krachen, weil du damit das Modul schon freigibst.
Das solltest du erst ganz am Ende, wenn das Programm beendet wird.

Bummi 15. Nov 2010 17:22

AW: PlugIn-System
 
sind die DLL's die Du hier testweise lädst initialisiert?
Delphi-Quellcode:
library Test;
var
 SaveDllProc: Pointer;
 procedure LibExit(Reason: Integer);
begin
 if Reason = DLL_PROCESS_DETACH then
  begin
    .
                .  // Exit-Code für Bibliothek
                .
  end;
   SaveDllProc(Reason);    // Speichern der Eintrittspunkt-Prozedur
  end;
 begin
    .
                .            // Code für die Initialisierung der Bibliothek
                .
  SaveDllProc := DllProc;      // Speichern der Kette von Exit-Prozeduren
  DllProc := @LibExit;     // Installieren der LibExit-Exit-Prozedur
 end.

Tossi65 15. Nov 2010 17:39

AW: PlugIn-System
 
@implementation
Ja das ist richtig. Ich rufe Loadlibrary auf damit die Initialisierung im Modul ausgeführt wird. Dabei werden alle
Formulare im Modul in eine Liste gespeichert.
Danach brauch ich das Handle eingentlich nicht mehr.

@Bummi
wofür ist die Funktion?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr.
Seite 3 von 3     123   

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