AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

COM Events und Threads - Problem

Ein Thema von bierwart · begonnen am 22. Mär 2008 · letzter Beitrag vom 24. Mär 2008
 
bierwart

Registriert seit: 15. Okt 2006
Ort: Geldern
3 Beiträge
 
Delphi 7 Professional
 
#1

COM Events und Threads - Problem

  Alt 22. Mär 2008, 09:20
Hallo,

ich habe folgende Applikation erstellt:

COM Server als Exe mit der Unterstützung von Events. (Automatisierungsobjekt)
Der Server soll als TCP/IP Server fungieren. Daten werden empfangen und sollen
anschliessend über das SinkObject an einen Client (Hier: Navision) übergeben werden.
Dort werden die Daten verarbeitet und ein Ergebnis zurückgeliefert.

Der Server ist als "Singleton-Server" ausgeführt.
Auf dem Serverformular wurde ein Button erstellt, der zu Testzwecken das Event "zündet".
Dies funktioniert einwandfrei. Die Daten werden übergeben und es wird auch gewartet, bis die
Funktion im Client abgearbeitet wurde und ein Rückgabewert existiert.


Problem:
Beim Aufruf über die "Execute" Funktion der TCPServer Komponente (Indy 9) läuft alles
vermeintlich korrekt, jedoch wird das Event im Client nicht gezündet.
Nachdem ich nun probiert habe expliziert über alle Clients zu iterieren, bekomme
ich zumindest die Fehlermeldung: "EInftCastError - Schnittstelle wird nicht unterstützt".

Meine Vermutung ist, dass das Problem der eigene Thread ist, indem die Execute Methode der Indy Komponente
ausgeführt wird.
(Habe leider auch in der Bibel "COM/DCOM/COM+" hier nichts passendes gefunden).
Wie kann ich eine threadübergreifende korrekte Verwednung der Sink-Objekte erreichen ?

Delphi-Quellcode:
procedure TOLEInterface.Ev_NewXMLData_All(Sender : TObject);
var
  aEnum : IEnumConnections;
  aCData : TConnectData;
  aSink : IUnknown;
  iFetch : Cardinal;
  OLEInVariant : OLEVariant;
  OLEOutVariant : OLEVariant;
  XMLOut : IXMLDocument;
  XMLIn : IXMLDocument;
  XMLOutStream : TMemoryStream;

begin
  aEnum := GetConnectionEnumerator;
  If aEnum <> Nil Then begin
    XMLOutStream := TMemoryStream.Create;
    Form1.GetXMLOut(XMLOut);
    XMLOut.SaveToStream(XMLOutStream,ofNone);
    XMLOutStream.Position := 0;
    OLEOutVariant := StreamToOleVariant(XMLOutStream, XMLOutStream.Size);

    while aEnum.Next(1,aCData,@iFetch) = S_OK do begin
      aSink := aCData.pUnk;
      If Assigned(aSink) Then
        (aSink as IOLEInterfaceEvents).NewXMLData(OLEOutVariant,OLEInVariant);
    end;
  end;
end;
An der Stelle
"(aSink as IOLEInterfaceEvents).NewXMLData(OLEOutVariant,OLEI nVariant);"
kommt es zu besagter Fehlermeldung.

Wie bereits erwähnt, beim Aufruf über einen Formularbutton funktioniert
die ganze Sache. Bin hier ziemlich ratlos !
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.
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