Problem mit COleDispatchDriver
-
Ein COM-Server wird wie folgt eingebunden:
m_pTAngWin = new TAngWin (); do { m_pTAngWin->CreateDispatch ("AngWinCom.AppServer",&e); pDisp = m_pTAngWin->m_lpDispatch; } while (!pDisp);Das funktioniert auch alles erstmal ganz prima. Nach diversen Funktionsaufrufen wird jedoch permanent die Exception RPC_E_WRONG_THREAD ausgelöst. Im nächsten Moment geht es wieder.
Der COM-Server ist mit dem BuilderX (Single-Threaded) erstellt, der aufrufende Client (selbst ein Server mit Multi-Threaded) in VC6. Ein früherer Hinweis, das die Thread-Modelle nicht gemixt werden dürfen, erwies sich als nicht hilfreich. Auch wenn der COM-Server als Multi-Threaded kompiliert wird, treten dieselben Fehler auf.
Irgendwie nicht befriedigend
. Weiß jemand Rat?Nachtrag: Wird der COM-Server mittels VB-Client wie folgt eingebunden
Set comnukl = GetObject(, "AngWInCom.AppServer") If Err.Number <> 0 Then Set comnukl = CreateObject("AngWInCom.AppServer") End Iffunktionieren die Aufrufe einwandfrei.
-
Hat wirklich keiner eine Idee?
Zum Hintergrund: Der COM-Server wird innerhalb einer Client-/Server-Umgebung eingebunden, die widerum mittels CORBA kommuniziert. Dabei sendet der Client aufgrund der Benutzereingaben ein Kommando an den Server, welcher auf dieser Basis die entsprechenden COM-Aufrufe erzeugt und die Ergebnisse via CORBA an den Client zurückliefert.
Einzige Auffälligkeit: Schlägt der erste COM-Aufruf fehl, schlagen auch alle folgenden fehl. Funktioniert der erste, gehen auch alle folgenden. Ein Timing-Problem ist damit eigentlich auszuschließen.
Die fehlerhaften Aufrufe kommen nicht beim Server an, sondern der Funktionsaufruf führt zur Exception in der OLE32.DLL. Der Fehler tritt niemals nach Initialisierung des COM-Servers auf. Die ersten Funktionsaufrufe bei Programmstart funktionierten (bis jetzt) immer.