AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Interfaces und LoadPackage

Ein Thema von alcaeus · begonnen am 17. Jun 2005 · letzter Beitrag vom 17. Jun 2005
 
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Problem mit Interfaces und LoadPackage

  Alt 17. Jun 2005, 00:23
Hallo ihr,

ich hol jetzt mal ein bisschen aus. Ich arbeite zur Zeit an einem Modulsystem, das sich die Module zur Laufzeit aus Packages holt. Dies sieht z.Zt. so aus:
Delphi-Quellcode:
TModuleItem = class(TCollectionItem)
private
   fModuleClassName: String;
   fModuleHandle: LongInt;
   fModuleAbsFileName: String;
public
   MainFormClass: TPersistentClass;
   MainForm: IModuleMainForm;
end;

//
//...
//

//Load package
Module.fModuleHandle := LoadPackage(Module.fModuleAbsFileName);
InitializePackage(Module.fModuleHandle);

//Now grab this class. If it's not there, get out
Module.MainFormClass := GetClass(Module.fModuleClassName);
if not Assigned(Module.MainFormClass) then
begin
   Result := ERR_MCS_MAINFORM_NOT_FOUND;
   Module.ModuleActive := False;
   exit;
end; //if not Assigned(Module.MainFormClass) then

//Actually load the module and initialize it
Module.MainForm := TFormClass(Module.MainFormClass).Create(Application);
with Module.MainForm do
begin
   Align := alClient;
   BorderStyle := bsNone;
   Parent := Self.fMainFormParent;
   Visible := False;
end; //with Module.MainForm do

Dies funktioniert bis jetzt auch ganz gut. Nun will ich aber, dass die Hauptklasse des Moduls bestimmte funktionen bereitstellt, da gewisse Dinge beim Laden erledigt werden muessen. Nachdem der Versuch mit einer Klasse, welche eine virtual abstract-Methode bereitstellt, nicht geklappt hat, habe ich mich fuer Interfaces entschieden. Also hab ich mir mal mein Interface deklariert:
Delphi-Quellcode:
IModuleMainForm = interface
['{EBAE57B3-3C1A-4695-9927-C56D641F6486}']
   procedure SetProgramStyle(const aStyle: String);
end; //type IModuleMainForm = interface
und im Modul die Deklaration entsprechend abgeaendert:
TForm1 = class(TForm, IModuleMainForm)
Nun stehe ich aber vor dem Problem, dass ich nicht weiss wie ich das Dingen verwenden soll.
Wenn ich den Code versuche zu compilieren, laeuft das Ding ja, aber ich komm immer noch nicht auf die Interface-Methoden ran. Also habe ich testweise die Deklaration von MainForm von TForm auf mein Interface geaendert.

Nun bekomme ich aber logischerweise einen Fehler, dass das Interface und TForm inkompatibel waeren (wen wunderts? *g*), und zwar genau hier:
Module.MainForm := TFormClass(Module.MainFormClass).Create(Application); Wie muss ich den Konstrukt nun umschreiben, so dass ich mein Form erstelle, aber gleichzeitig auch auf die Interface-Methoden zugreifen kann? Ich hab hier irgendwie voll die Denkblockade

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  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 06:06 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