Freigeben über


RPC NDR-Formatzeichenfolgen

NDR-Engine: 32-Bit-Interpreter

In diesem Dokument werden die Formatzeichenfolgendeskriptoren, manchmal auch als MOPs bezeichnet, für die 32-Bit-NDR-Engine beschrieben. In diesem Abschnitt werden Änderungen im Zusammenhang mit der Entwicklung vom -Oi-Interpreter zur Interpreterebene –Oif sowie Ergänzungen im Zusammenhang mit Pipes und asynchroner Unterstützung beschrieben.

In diesem Dokument werden die aktuelle Microsoft Interface Definition Language (MIDL)-Technologie aus Der Engine und der aktuellen NDR-Engine beschrieben.

Übersicht

Die NDR-Engine ist die Marshalling-Engine der Rpc- und DCOM-Komponenten (Remote Procedure Call). Es behandelt alle Stub-bezogenen Probleme eines Remoteanrufs. Als Prozess wird das NDR-Marshalling vom C-Code von MIDL-generierten Stubs, einem MIDL-JIT-Typgenerator oder von Stubs gesteuert, die von anderen Tools generiert oder manuell geschrieben wurden. Die NDR-Engine steuert wiederum die zugrunde liegende Laufzeit (DCOM oder RPC), die mit bestimmten Transporten kommuniziert.

Das ursprüngliche Ziel des Entwurfs war es, ein Tool für ein effektives Marshalling für beliebige Daten bereitzustellen, basierend auf informationen, die vom MIDL-Compiler bereitgestellt wurden. Die in diesem Dokument beschriebenen Formatzeichenfolgen – und tatsächlich alle informationen, die vom Compiler für die Nutzung der NDR-Engine generiert werden – wurden immer als interne Schnittstelle zwischen compiler und engine betrachtet. Ebenso sind schnittstellen, die der Engine zur Behandlung von Laufzeitproblemen zur Verfügung stehen, größtenteils intern (einige Ausnahmen bestehen auf der RPC-Laufzeitseite, und einige DCOM-Schnittstellen, die von der Engine verwendet werden, sind extern).

Zwei typische Marshalling-Ansätze waren schon immer Inline- und datengesteuerte (interpretierte) Technologien. MIDL unterstützt sowohl über seine Schalter –Os als auch –Oi* in seinen C-generierten Stubs. Darüber hinaus kann MIDL die TLB-Bibliotheken generieren, die vom oleautomation-Paket verwendet werden. Dementsprechend besteht eine Perspektive der Internen der Engine darin, dass sie aus zwei Teilen besteht.

Die erste ist eine Reihe von Routinen, die die Größenanpassung, Marshalling usw. behandeln, die typischen Datentypobjekten wie einer Struktur oder einem Array entsprechen. Diese Routinen sind für die Leistung optimiert; Beispielsweise versuchen sie in der Regel, Daten nach Möglichkeit zu blockieren. Dieser Teil wird häufig als Kern-NDR-Engine bezeichnet.

Der zweite Teil besteht aus einem Interpreter und seinen verwandten Stücken. Der Interpreter verwendet Routinen aus der Kern-NDR-Engine, wie aus einer internen Bibliothek, um einen Remoteanruf mit allen argumenten gemarshallten und ungemarshalierten Argumenten auszuführen.

Die Kern-NDR-Engine wird auf ähnliche Weise verwendet, unabhängig davon, ob sie von Inlinestubs oder vom Interpreter verwendet wird. Alle Kernmodulroutinen hängen vom Zustand ab, der von einer Stub-Nachrichtenstruktur übergeben wird. Die Struktur wird entsprechend vom Inlinestub oder vom Interpreter eingerichtet. Im Laufe der Jahre wurde die Kern-Engine in einem anderen Kontext verwendet; Derzeit besteht der Interpreter tatsächlich aus mehreren unterschiedlichen Interpreterschleifen. Diese stehen im Zusammenhang mit den alten und neuen Interpretern (–Oi im Vergleich zu –Oif) sowie mit Schleifen im Zusammenhang mit der Datenserialisierung (Beiz), der asynchronen RPC-Unterstützung und der asynchronen DCOM-Unterstützung (RPC und DCOM verfügen über unterschiedliche asynchrone Programmiermodelle).

Abgesehen von neuen Features ist ein wichtiger Aspekt der Entwicklung der NDR-Engine eine allgemeine Verschiebung des Ansatzes für Interpreter. NDR-Version 1.1 begann im Rahmen eines neuen MIDL 2.0-Ansatzes zum Marshalling, wobei die Inline-Stubs für Leistungsaspekte bevorzugt wurden. Mit der neuesten Version von NDR ist –Oif der am häufigsten verwendete Modus des Compilers geworden, fast ohne Inline-Stubs.

Zeichenfolgendeskriptoren der RPC-NDR-Engine werden in den folgenden Themen ausführlicher beschrieben: