![]() |
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?? |
AW: PlugIn-System
So ein Problem gelöst nu kommt ein neues.
Delphi-Quellcode:
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
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; 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 |
AW: PlugIn-System
Zitat:
Das solltest du erst ganz am Ende, wenn das Programm beendet wird. |
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. |
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 04:33 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-2025 by Thomas Breitkreuz