Zitat:
Eine mögliche Vorgehensweise (noch ohne
COM):
Frage mich warum das in Delphi so kompliziert ist ein Klasse für den zugriff von außen zu instanzieren.
In VB erstelle ich ein öffentliche Klasse ganz einfach.. ohne mich mit Interface-Deklaration rumzuschlagen.
Dll 'GenInterface' erstellen dort alle funktionen die ich in anderen Projekten verwenden will öffentlich machen.
Beispiel:
Delphi-Quellcode:
Public Property Get EQVisible() As Boolean
//
End Property
Public Property Let EQVisible(ByVal sEQVisible As Boolean)
//
End Property
Public Sub Execute(ByVal lngHwnd As Long)
//
End Sub
Public Function GetPlaylistBColor(ByVal mColor As OLE_COLOR) As OLE_COLOR
//
End Function
Public Function GetPlaylistFColor(ByVal mColor As OLE_COLOR) As OLE_COLOR
//
End Function
Das wars dann schon..
Nachher muss ich diese
DLL als Interfacebrücke nur noch in meine Anwendung als Verweis einbinden.
Die Plugins welche dann mit meiner Anwendung kommunizieren sollen
müssen dann nur eine MasterClass besitzen bsp .. clsMain
Dort implementiere ich das Interface natürlich auch in der Anwendung.
Implements GenInterface.IPluginGen
Dort werden dann alle Funktionen (vererbungen des GenInterface) erneute deklariert.
Und dann kann man zwischen 'Anwendung <GenInterface > Plugin' kommunizieren
Delphi-Quellcode:
Private Property Get IPluginGen_EQVisible() As Boolean
IPluginGen_EQVisible = EQVis
End Property
Private Property Let IPluginGen_EQVisible(ByVal sEQVisible As Boolean)
EQVis = sEQVisible
End Property
Private Sub IPluginGen_Execute(ByVal lngHwnd As Long)
Load frmBrowser
End Sub
Private Function IPluginGen_GetPlaylistBColor(ByVal mColor As stdole.OLE_COLOR) As stdole.OLE_COLOR
mBackColor = mColor
getColor = True
End Function
Private Function IPluginGen_GetPlaylistFColor(ByVal mColor As stdole.OLE_COLOR) As stdole.OLE_COLOR
mForeColor = mColor
End Function
Also warum ist das in Delphi so kompliziert?
EDIT:
Jede Anwendung die nun über die clsMain verfügt und das GenInterface als
Verweis einbindet kann nun mit meiner Anendung kommunizieren ohne
das sie die Interface-Bezeichnung (['{C55C5E2B-CC7D-4B8F-97BC-AB2A66EAAA33}']) kennen muss
gruss Emil