![]() |
Methode wird vom Automatisierungsobjekt nicht unterstützt
Ich reagiere auf folgende Nachricht:
Delphi-Quellcode:
Das sieht bei mir so aus:
OnMessage(Msg: IJabberMsg; Tag: IXMLTag)
Delphi-Quellcode:
Jetzt kommt aber die Exception, dass die Methode FromJID nicht von dem Automatisierungsobjekt unterstützt wird. Obwohl sie eigentlich im Interface deklariert ist:
procedure TDWJabberMsg.FOnMessageEvent(Sender: TObject; var Msg: OleVariant; var Tag: OleVariant);
begin ShowMessage(Msg.FromJID); if Assigned(OnDWMessage) then begin FOnMessage(self, Msg, Tag); end; end;
Delphi-Quellcode:
Wie komme ich jetzt da dran, um die Werte auszugeben?
IJabberMsg = interface(IDispatch)
['{2AE8D231-B888-11D3-AECB-00A076A018E8}'] ... property FromJID: WideString read Get_FromJID write Set_FromJID; ... end; |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
hi, versuchs mal so ...
Delphi-Quellcode:
procedure TDWJabberMsg.FOnMessageEvent(Sender: TObject; var Msg: OleVariant; var Tag: OleVariant);
begin ShowMessage(TDWJabberMsg(Msg).FromJID); if Assigned(OnDWMessage) then begin FOnMessage(self, Msg, Tag); end; end; |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Leider kommt da: "Ungültige Typumwandlung". :(
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
hmm evtl reicht ja folgendes ...
Delphi-Quellcode:
procedure TDWJabberMsg.FOnMessageEvent(Sender: TObject; var Msg: OleVariant; var Tag: OleVariant);
begin ShowMessage(Msg); if Assigned(OnDWMessage) then begin FOnMessage(self, Msg, Tag); end; end; poste doch mal bitte das komplette interface ... dann kann ichs besser verstehen :wink: |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Liste der Anhänge anzeigen (Anzahl: 1)
Ich kann die Typbibliothek mal anhängen, weil ich nicht weiß, was du brauchst.
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
also
OnMessage(Msg: IJabberMsg; Tag: IXMLTag) ist was ganz anderes als TDWJabberMsg.FOnMessageEvent(Sender: TObject; var Msg: OleVariant; var Tag: OleVariant); ...auf was reagierst du denn nun ? |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Ich habe das in einer Klasse. In der wird der Event ausgelöst und dann wird der Event nach draußen weitergereicht, damit man drauf reagieren kann, wenn man die Klasse benutzt. Hat bisher sehr gut Funktioniert.
Beispiel: Konstruktor:
Delphi-Quellcode:
Und dann im Forular:
TOnAuthError = procedure(Sender: TObject; var ErrorText: OleVariant) of object;
TOnRosterItem = procedure(Sender: TObject; var Item: OleVariant) of object; TDWJabberSession = class(TObject) private FJabberSession: TJabberSession; ... FOnAuthError: TOnAuthError; ... procedure FOnAuthErrorEvent(Sender: TObject; var ErrorText: OleVariant); public ... property OnDWAuthError: TOnAuthError read FOnAuthError write FOnAuthError; ... end; constructor TDWJabberSession.Create; begin FJabberSession := TJabberSession.Create(nil); with FJabberSession do begin ... OnAuthError := FOnAuthErrorEvent; ... end; end; procedure TDWJabberSession.FOnAuthErrorEvent(Sender: TObject; var ErrorText: OleVariant); begin if Assigned(OnDWAuthError) then FOnAuthError(Self, ErrorText); end;
Delphi-Quellcode:
Mit diesem Ereignis geht das wunderbar, weil der Paramter vom Typ OleVariant ist. Jertzt weiß ichnicht, wie ich damit umgehen soll wenn der Parameter vom Typ IJabberMsg ist. Dieser Typ ist nach außenhin auch nicht bekannt.
procedure TForm1.OnJabAuthError(Sender: TObject;
var ErrorText: OleVariant); begin Memo1.Lines.Add(ErrorText + JabSes.LastError); end; Deklariere ich die Paramter wie hier: Zitat:
Delphi-Quellcode:
FJabberSession.OnMessage := FOnMessageEvent;
Zitat:
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Warum nutzt du denn nicht den Componentenwrapper den dir Delphi erzeugt hat .. ist in der TLB Datei die du gepostet hast ?
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Das habe ich schon probiert, wenn ich mich nicht täusche (Ich habe chon so viel probiert... ;) ). Wie würde denn das it dem Komponentenwrapper aussehen? Wäre schön, wenn ich morgen im Laufe des tages dem Chef einen funktionierenden Client präsentieren könnte. :?
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Was muss ich denn installieren um das interface selbst zu testen ?
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Liste der Anhänge anzeigen (Anzahl: 1)
Du musst die Com-Server registrieren und dann die Typbibliothek importieren bzw. du kannst auch gleich meine Unit nehmen. Und zum Testen wäre natürlich ein Jabber Server nicht schlecht und eine schon halbwegs funktionierende Demo. Das wirst du aber nicht haben und den Code, den ich bisher habe kann ich nicht rausgeben, der ist für die Firma.
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Ich habe ja echt keinen Bock das ganze nachzucoden ... somit ist meine Hilfe leider stark eingeschränkt..
teste doch mal ob das hier funktioniert.
Delphi-Quellcode:
procedure TForm1.JabberSession1Message(ASender: TObject; const Msg: IJabberMsg; const Tag: IXMLTag);
var myMsg : TJabberMsg; begin IUnknown(Msg).QueryInterface(IJabberMsg, myMsg); ShowMessage(myMsg.FromJID); end; |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Zitat:
Zitat:
Zitat:
![]() Aus dem WinJab Code:
Delphi-Quellcode:
procedure JabberMessage(Sender: TObject; var Msg, Tag: OleVariant);
...; ...; ...; {---------------------------------------} procedure TfrmJabber.JabberMessage(Sender: TObject; var Msg, Tag: OleVariant); var FromJID: string; Subject: string; Body: string; MsgType: JabberMsgType; ...; begin // handle messages // search for this user in the roster FromJID := Msg.FromJID; Subject := Msg.Subject; Body := Msg.Body; ...; |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
So, da sind wir wieder.
Die gute Nachricht: Es läßt sich kompilieren und es kommt kein Fehler beim Ausführen. Die schlechte: myMsg ist immer nil. :( |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe das ganze jezuz ohne Klasse gemacht und ich habe immer noch den selben Fehler, dabei sollte mein Code jetzt identisch mit dem von WinJab sein. Sie dazu Jabber1.pas aus dem Anhang Zeile 2881.
Ich verstehe es einfach nicht. :wall: |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Liste der Anhänge anzeigen (Anzahl: 1)
Irgendwie sieht meine TLB etwas anders aus als deine ... ich hänge sie mal an ..
kannste ja mal testweise austauschen. Ist den Msg auch nil ??? |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Aha. Jetzt stimmen die parmeter von den Ereignissen nicht mehr:
Delphi-Quellcode:
procedure OnJabberConnect(Sender: TObject);
procedure OnJabberCommError(Sender: TObject; var ErrorText: OleVariant); procedure OnJabberAuthError(Sender: Tobject; var ErrorText: OleVariant); procedure OnJabberDisConnect(Sender: TObject); procedure OnJabberRosterItem(Sender: TObject; var Item: OleVariant); procedure OnJabberRosterStart(Sender: TObject); procedure OnJabberRosterEnd(Sender: TObject); procedure OnJabberMessage(Sender: TObject; var Msg: OleVariant; var Tag: OleVariant);
Delphi-Quellcode:
{ Event handlers }
with JabberSession do begin OnConnect := OnJabberConnect; OnCommError := OnJabberCommError; OnAuthError := OnJabberAuthError; OnDisconnect := OnJabberDisConnect; OnRosterItem := OnJabberRosterItem; OnRosterStart := OnJabberRosterStart; OnRosterEnd := OnJabberRosterEnd; OnMessage := OnJabberMessage; end; Zitat:
Delphi-Quellcode:
Bei mir:
TJabberSessionOnCommError = procedure(ASender: TObject; const ErrorText: WideString) of object;
Delphi-Quellcode:
TJabberSessionOnCommError = procedure(Sender: TObject; var ErrorText: OleVariant) of object;
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
JA! :bouncing4: :firejump: :bounce1: :bounce2: :dancer2: :witch: :hello: :roteyes: Es geht.
Mit welcher Delphi Version hast du die Typbibliothek erzeugt? Meine wurde mit Delphi 6 Professional erzeugt. :roll: |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
gibts doch gar nicht ...
Habs mit D2006 gemacht . Schön das ich dir helfen konnte . |
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Du bist klasse. Besten, besten herzlichen Dank. :P
|
Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
Kein Problem .. deine Sourcen haben mir schon sehr oft weitergeholfen :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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