Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Package: Prozedur ausführen mal funktioniert es mal nicht (https://www.delphipraxis.net/133133-package-prozedur-ausfuehren-mal-funktioniert-es-mal-nicht.html)

napsterxx 26. Apr 2009 12:22


Package: Prozedur ausführen mal funktioniert es mal nicht
 
Also wie bereits in vorherigen Threads erwähnt bastel ich gerade ein Pluginsystem. Dieses Pluginsystem funktioniert grob wie folgt:

Plugins und Kern der Anwedung liegen als bpl vor - eine EXE Datei welche den Kern läd und anzeigt.

Kern:
* eine einfache Form mit 2 Buttons.

Plugin
* TPlugin ist eine selbst erstellte Klasse welche von einer anderen eigenen Klasse abgeleitet wurde
TPlugin = class(TPluginClass)
* exportiert die Funktion LoadPlugin(var Plugin: TPlugin);


Kern wird angezeigt und beim starten die Plugins geladen, sprich die Methode LoadPlugin wird ausgeführt.
Wie zu erkennen ist erhalte ich nach dem Laden des Plugins eine Variable von seiner Klasse (welche registriert wurde). Diese Klasse hat Eigenschaften wie Author, Datum etc., aber auch Funktionen wie Init(); und Exec();
Nach dem Aufruf von LoadPlugin rufe ich nun Init des Plugins auf, in welcher Prozedur die Eigenschaften wie Author etc. befüllt werden, anschließend lasse ich mir den Author via. ShowMessage() zurück geben. Dies Funktioniert alles Problem los.
Das Plugin welches ich durch LoadPlugin erhalten habe lege ich in einem Array ab welches bestandteil des s.g. PluginManager's ist.
Das Komische ist nur ich kann nicht im Nachhinein eine Funktion/Prozedur eines Plugins aufrufen. Sprich:
Delphi-Quellcode:
PluginManager.Plugin[0].Plugin.Init();
funktioniert nicht - hingegen funktioniert aber folgendes:
Delphi-Quellcode:
ShowMessage( PluginManager.Plugin[0].Plugin.Author );
Fehlermeldung beim Aufrufen im Nachhinein:
Zitat:

---------------------------
Debugger Exception Notification
---------------------------
Project Main.exe raised exception class EAccessViolation with message 'Access violation at address 009C2616 in module 'Kernel.bpl'. Read of address 009D1D04'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

napsterxx 26. Apr 2009 17:04

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Kommt schon, es gibt in der DP wirklich kluge Köpfe - äußert euch doch bitte mal :D

mkinzler 26. Apr 2009 17:09

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Du willst kluge Köpfe in eine Datenbank Packen :mrgreen:

napsterxx 26. Apr 2009 17:40

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
*DP! :D

napsterxx 28. Apr 2009 14:52

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Ist irgendjemand hier? :roll:

Panthrax 28. Apr 2009 16:05

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Quelltext bitte. Deine Beschreibung ist ja ganz gut. Wie es aber zu einer Zugriffsverletzung kommt, beschreibt, glaube ich, der Quelltext am besten...

napsterxx 28. Apr 2009 17:11

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Code folgt in Kürze komplett

Panthrax 28. Apr 2009 18:49

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Zitat:

[DCC Fehler] Kernel.pas(46): E2003 Undeklarierter Bezeichner: 'PluginCount'
Ich hatte an etwas gedacht, bei dem ich dann nur noch F9 zu drücken brauche. -- Falsch gedacht. Jetzt habe ich mir selbst etwas um Deine Dateien von oben zusammengeschustert. Neben diesen Ergänzungen habe ich nur eine Änderung vorgenommen:

Delphi-Quellcode:
procedure TeConPluginManager.LoadPlugin(DLLName: String);
{ ... }
  finally
    UnloadPackage(Module);
  end else
{ ... }
Delphi-Quellcode:
procedure TeConPluginManager.LoadPlugin(DLLName: String);
{ ... }
  finally
//    UnloadPackage(Module);
  end else
{ ... }
Ich kann keinen Fehler feststellen. Execute zeigt ein hübsches kleines Fenster...

Du darfst das Modul natürlich erst dann entladen, wenn Du nichts mehr daraus benutzt. Das Aukommentieren ist daher nur die halbe Miete, es muss dafür noch der richtige Platz beim Programmbeenden gefunden werden.

napsterxx 29. Apr 2009 13:01

Re: Package: Prozedur ausführen mal funktioniert es mal nich
 
Danke, das war der Fehler :wall:


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