Zitat von
shmia:
Also gut......
Du hast 2 Interfaces:
IPlugIn und
IPlugManager.
IPlugin muss von einer Active-X Bibliothek implementiert werden.
IPlugManager wird von deiner Hauptanwendung implementiert.
Die PlugIn-Schnittstelle könne so aussehen:
Delphi-Quellcode:
IPlugIn = interface
procedure SetExplorer(v:IPlugManager); // damit bekommt dein PlugIn ein Interfacezeiger
// auf die Hauptanwendung mit.
function GetDescription : Widestring;
function GetFeatureFlags: Integer;
....
end;
Beide Interfaces (
IPlugIn und
IPlugManager) werden nun in einer TLB abgelegt.
Diese TLB nenne ich hier mal
Charlie.
Das Interface
IPlugManager gibt es (unter einem anderen Namen) ja schon in deiner Hauptanwendung. Du musst das Interface aus der TLB der Hauptanwendung rausschneiden und in
Charlie einfügen.
Sowohl deine Hauptanwendung, als auch jede PlugIn-
DLL müssen
Charlie einbinden.
Die TLB
Charlie übernimmt sozusagen die Aufgabe eines universellen Includefiles, dass von vielen Programmiersprachen (Delphi, C++-Builder, Visual C++, ...) verstanden wird.
Hi shmia,
Danke für deine Antwort.
Ich habe jedoch nicht ganz verstanden, wie das ganze System abläuft.
Nun, in der
ActiveX Bibliothek (also in dessen TLB
"Charlie") liegt das Interface
IPlugin, sowie die Interfaces meiner Anwendung (In deinem Beispiel auch noch der
IPlugManager). In meiner Anwendung befindet sich die Implementierung der Interfaces meiner Anwendung.
Die von IPlugin, wie von dir gesagt, in der
ActiveX Bibliothek.
Jetzt verstehe ich aber die Aufgaben von
IPlugin und
IPlugManager nicht ganz, bzw. ich verstehe nicht, wie die Plugin
DLL an die Implementierung aus meiner EXE-Datei kommt (bzw. an das korrekte Interface der Implementierung).
Du hast in IPlugin die Möglichkeit das Interface
IPlugManager (das, soweit ich verstanden habe, in der Anwendung implementiert wird) zu übergeben. Aber welchen Sinn hat das? Wenn ich in meiner Anwendung dort dem Interface
IPlugin (, das ich mit der CoClass aus der
ActiveX Bibl. erstellt habe) den Zeiger (hier
IPlugManager via SetExplorer) übergebe, ist es doch für die Plugin-DLLs (etc.) nicht verfügbar?!
Ich blicke in dem System noch (leider) nicht ganz durch.
Kannst du mir vielleicht ein weiteres mal helfen?
mfG
mirage228