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 If
    

    funktionieren 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.


Anmelden zum Antworten