INFO: Beschreibung der RPC_E_WRONG_THREAD Fehler

Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 172314
Zusammenfassung
RPC_E_WRONG_THREAD-Fehlermeldung, wenn ein Thread über eine Interfacepointer aufruft, die ein Proxyobjekt, das nicht zu den thread'sapartment gehört.
Weitere Informationen
Siehe Abschnitt Verweise am Ende dieses Artikels Weitere Informationen über die Funktionsweise der COM-Threadingmodelle. Aninterface Zeiger frei Clientthread möglich, eines der Followingtypes:

  • Einen direkter Zeiger auf das Objekt. In diesem Fall ist das Objekt in demselben Apartment als Client-Thread. Außerdem ist kein System an (COM)-Code zwischen dem Aufrufer und dem aufgerufenen. – oder –

  • Ein Zeiger auf einen Proxy. In diesem Fall ist das Objekt in einem anderen Apartment aus dem Client-Thread. System (COM) sofern auch zwischen dem Aufrufer und dem aufgerufenen Code befindet.
Ob der Client hat einen Zeiger oder anderen abhängigen Onsuch Faktoren als ob das Objekt in-Process- oder Out-of-Process-sofern Objekt ist im Prozess, ob das Threadingmodell "IsCompatible"-Objekt mit dem Apartmentmodell des aufrufenden Threads. Siehe die Articlein im Abschnitt "INFORMATIONSQUELLEN" unten für Weitere Informationen.

Beim Erstellen ein Proxyobjekts zugeordnet ist die Apartment Hyperlinkelement es. Wenn ein Zeiger auf ein Proxyobjekt irgendwie übergeben ein Threadwhich gehört nicht zur Apartment (z. B. über eine gemeinsame Globalvariable) und wenn dieser Thread dann RPC_E_WRONG_THREAD Fehler durch this-Zeiger, der Callreturns aufruft. COM gibt diesen Fehler zurück, da Theproxy Objekt ungültig für einen Thread ist, der nicht das Proxyobjekt erstellt Apartmentthat gehört. Folgendes ist auch ein Fehler. Oneapartment enthält einen direkten Zeiger auf das Objekt. Es überträgt Thepointer an einem anderen Apartment über eine globale Variable (ohne Marshallen). Die zweite Apartment Aufrufe über diesen Zeiger. Dieser Aufruf ist Inerror. COM hat jedoch keine Möglichkeit erkennen dies anders Proxy.

Das richtige muss über COM'smarshaling Mechanismus einen Schnittstellenzeiger (eine Directpointer oder ein Proxy-Zeiger) aus einem Apartment zu einem anderen übertragen. Quelle Apartment können callCoMarshalInterThreadInterfaceInStream() Schnittstelle Zeiger Toa freigegebenen (global) Streams gemarshallt. Ziel-Apartment kann Thisinterface Zeiger unmarshal durch Aufrufen von CoGetInterfaceAndReleaseStream(). Diese Actioncreates einen Proxy, der für das Ziel-Apartment. Hinweis ThatCOM Proxyobjekte sind "schlau" Problembehebung "Proxychaining." Also ist ein Apartment marshallt eine Schnittstelle Zeiger Toapartment B, und B zu C marshallt, Objekt des Proxys, wird in C# direkt an den Stub in a verbunden Daher, wenn Ccalls über den Proxy Zeiger Ruft den direkten und B nicht im Bild. COM wird auch "zirkuläre" Schnittstelle übergeben Problem vermieden. D. h. wenn ein marshallt B und B marshallt c und C marshallt a resultierenden Zeiger in A wird einen direkten Zeiger keinen Proxy-Zeiger.

Hinweis: die RPC_E_WRONG_THREAD Fehler kann auftreten, selbst wenn der COM-Rulesare folgt und keine Schnittstellen zwischen Apartmentswithout Marshalling explizit übergeben werden. Dies geschieht, wenn ein prozessinternes Objekt Aggregate System Free Threaded Marshaller (FTM) vom CallingCoCreateFreeThreadMarshaler bereitgestellt und enthält auch Verweise auf COM-Proxys. Normalerweise verwenden in-Process-Objekte, die als Threadingmodell markiert "Both" den FTM. Wird ein Schnittstellenzeiger auf ein Objekt gemarshallt Fromone Apartment in einen anderen, ein direkter Zeiger auf das Objekt übergeben (Noproxy-Stub erstellt). Dies ist der Vorteil den FTM jedoch Fehler RPC_E_WRONG_THREAD Wenn Thisalso führt das Objekt Implementationtries über den Proxy-Zeiger auf ein Original-Apartment-Thread aufrufen. Es gibt keine gute Lösung für dieses Problem im Allgemeinen Objekte, Fehleranalyse FTM sollte nicht Clients-Apartment COM-Server. Dazu nur selten erforderlich, sollten sie den Aufruf an Aforwarding Objekt übergeben, die den FTM nicht verwendet. Wenn sie häufig dazu sollten sie "frei" oder "both" markieren und den FTM nicht verwenden. Falleeines-Schnittstellenzeiger auf ein Objekt zu einem anderen Apartment gemarshallt wird, erzeugt die Proxys/Stub erforderlich, wie das Objekt keine Longeraggregates mit den FTM.
Informationsquellen
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
150777 INFO: Beschreibung und Funktionsweise von OLE Threadingmodelle

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 172314 – Letzte Überarbeitung: 10/26/2015 02:13:00 – Revision: 4.0

  • kbdcom kberrmsg kbinfo kbmt KB172314 KbMtde
Feedback