Hallo,
ich möchte eine ActiveX-DLL erzeugen, die eine Klasse liefert, deren Methoden Parameter besitzt, die in einem anderen ActiveX deklariert sind. Sprich ich will eine ActiveX erzeugen, das als Plugin von einem anderen ActiveX-Server verwendet werden kann. In VisualBasic ist das absolut kein Hexenwerk, aber in Delphi7 will das ums verrecken nicht klappen.
Ich habe eine TLB die die globalen Objekte liefert, die der ActiveX-Server zur Verfügung stellt. Darin ist zum Beispiel ein ILoginDispatch deklariert, daß ich als Typ für einen Parameter meines Plugins verwenden muss.
Delphi erlaubt bei der Erstellung der TLB meines Plugins nicht diesen Typ, sondern nur irgendwelche Standardtypen.
In VB sieht zum Beispiel eine Function OnLoad wie folgt aus (TLB definition nimmt mir Visual Studio komplett ab):
In Delphi hab ich versucht mir in der TLB mit IUnknown zu behelfen
In meiner Implementierung hab ich dann folgendes versucht:
Ist das grundsätzlich falsch?
Viel wohler wäre mir, wenn ich in der TLB direkt auf ILoginDispatch als Paramter zugreifen könnte. Aber die TLB wehrt sich vehement gegen Änderungen, ich kann die uses-Klausel nicht erweitern, und demzufolge auch nicht die erforderliche Server-TLB einbinden. Das Ganze versuche ich jetzt schon immer wieder seit Wochen. Und langsam verzweifel ich an der Kiste. Warum geht das in VB so trivial einfach, aber in Delphi überhaupt nicht? :evil:
Ich habe beim Ausführen im PluginServer dann schließlich das Ergebnis, daß sobald ich aus meinem Server das Plugin verwenden will, nach dem erfolgreichen Laden und initialisieren des Plugins die Meldung kommt, die Klasse wäre nicht registriert. Ich vermute der Server will die Methode OnLoad ausführen, aber da kracht es dann halt.
Weiß hier jemand was dazu?
Vielen Dank,
Sherlock
ich möchte eine ActiveX-DLL erzeugen, die eine Klasse liefert, deren Methoden Parameter besitzt, die in einem anderen ActiveX deklariert sind. Sprich ich will eine ActiveX erzeugen, das als Plugin von einem anderen ActiveX-Server verwendet werden kann. In VisualBasic ist das absolut kein Hexenwerk, aber in Delphi7 will das ums verrecken nicht klappen.
Ich habe eine TLB die die globalen Objekte liefert, die der ActiveX-Server zur Verfügung stellt. Darin ist zum Beispiel ein ILoginDispatch deklariert, daß ich als Typ für einen Parameter meines Plugins verwenden muss.
Delphi erlaubt bei der Erstellung der TLB meines Plugins nicht diesen Typ, sondern nur irgendwelche Standardtypen.
In VB sieht zum Beispiel eine Function OnLoad wie folgt aus (TLB definition nimmt mir Visual Studio komplett ab):
Code:
Public Shadows Function OnLoad(ByRef lg As GlobalObject.Login) As Object //GlobalObject ist die Server-TLB, Login vom Typ MsgBox("User " & lg.username & " started PlugIn ( OnLoad ).") // ILoginDispatch OnLoad = True End Function
Code:
IGMTComClass = interface(IDispatch) ['{F74B551E-7464-4427-8A8F-4899322FFFE1}'] procedure DisplayMessage(const Text: WideString); safecall; function OnLoad(const lg: IUnknown): WordBool; safecall; end;
Code:
uses GlobalObject_TLB . . function TGMTComClass.OnLoad(const lg: IUnknown): WordBool; begin MeinForm.Label1.Caption:= string((lg as login).username); Result:=True; end;
Viel wohler wäre mir, wenn ich in der TLB direkt auf ILoginDispatch als Paramter zugreifen könnte. Aber die TLB wehrt sich vehement gegen Änderungen, ich kann die uses-Klausel nicht erweitern, und demzufolge auch nicht die erforderliche Server-TLB einbinden. Das Ganze versuche ich jetzt schon immer wieder seit Wochen. Und langsam verzweifel ich an der Kiste. Warum geht das in VB so trivial einfach, aber in Delphi überhaupt nicht? :evil:
Ich habe beim Ausführen im PluginServer dann schließlich das Ergebnis, daß sobald ich aus meinem Server das Plugin verwenden will, nach dem erfolgreichen Laden und initialisieren des Plugins die Meldung kommt, die Klasse wäre nicht registriert. Ich vermute der Server will die Methode OnLoad ausführen, aber da kracht es dann halt.
Weiß hier jemand was dazu?
Vielen Dank,
Sherlock
Comment