Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Methode wird vom Automatisierungsobjekt nicht unterstützt (https://www.delphipraxis.net/63292-methode-wird-vom-automatisierungsobjekt-nicht-unterstuetzt.html)

Luckie 16. Feb 2006 12:49


Methode wird vom Automatisierungsobjekt nicht unterstützt
 
Ich reagiere auf folgende Nachricht:
Delphi-Quellcode:
OnMessage(Msg: IJabberMsg; Tag: IXMLTag)
Das sieht bei mir so aus:
Delphi-Quellcode:
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;
Jetzt kommt aber die Exception, dass die Methode FromJID nicht von dem Automatisierungsobjekt unterstützt wird. Obwohl sie eigentlich im Interface deklariert ist:

Delphi-Quellcode:
IJabberMsg = interface(IDispatch)
    ['{2AE8D231-B888-11D3-AECB-00A076A018E8}']
    ...
    property FromJID: WideString read Get_FromJID write Set_FromJID;
    ...
end;
Wie komme ich jetzt da dran, um die Werte auszugeben?

TKC 16. Feb 2006 13:55

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;

Luckie 16. Feb 2006 13:58

Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
 
Leider kommt da: "Ungültige Typumwandlung". :(

TKC 16. Feb 2006 14:05

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:

Luckie 16. Feb 2006 14:08

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.

TKC 16. Feb 2006 14:20

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 ?

Luckie 16. Feb 2006 14:33

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:
  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;
Und dann im Forular:
Delphi-Quellcode:
procedure TForm1.OnJabAuthError(Sender: TObject;
  var ErrorText: OleVariant);
begin
  Memo1.Lines.Add(ErrorText + JabSes.LastError);
end;
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.

Deklariere ich die Paramter wie hier:
Zitat:

OnMessage(Msg: IJabberMsg; Tag: IXMLTag)
Sagt er mir an dieser Stelle:
Delphi-Quellcode:
FJabberSession.OnMessage := FOnMessageEvent;
Zitat:

[Fehler] DWJabber.pas(295): Inkompatible Typen: 'OleVariant' und 'IJabberMsg'
Deswegen habe ich sie als OleVariant deklariert.

TKC 16. Feb 2006 16:17

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 ?

Luckie 16. Feb 2006 18:40

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. :?

TKC 16. Feb 2006 19:21

Re: Methode wird vom Automatisierungsobjekt nicht unterstütz
 
Was muss ich denn installieren um das interface selbst zu testen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz