Condividi tramite


Stringhe di formato RPC NDR

Motore NDR: interprete a 32 bit

Questo documento descrive i descrittori di stringa di formato, talvolta denominati MOP, per il motore NDR a 32 bit. In questa sezione vengono descritte le modifiche associate all'evoluzione dall'interprete -Oi al livello di interprete -Oif , nonché aggiunte correlate a pipe e supporto asincrono.

Questo documento descrive la tecnologia MIDL (Microsoft Interface Definition Language) corrente dal punto di vista del motore e il motore NDR corrente.

Panoramica

Il motore NDR è il motore di marshalling dei componenti RPC (Remote Procedure Call) e DCOM. Gestisce tutti i problemi correlati allo stub di una chiamata remota. Come processo, il marshalling NDR viene guidato dal codice C dagli stub generati da MIDL, da un generatore di tipi JIT MIDL o da stub generati da altri strumenti o scritti manualmente. A sua volta, il motore NDR determina il tempo di esecuzione sottostante (DCOM o RPC) che comunica con trasporti specifici.

L'obiettivo originale della progettazione era quello di fornire uno strumento per il marshalling efficace per i dati arbitrari, in base alle informazioni fornite dal compilatore MIDL. Le stringhe di formato descritte in questo documento, e in effetti tutte le informazioni generate dal compilatore per l'utilizzo del motore NDR, sono sempre state considerate un'interfaccia interna tra il compilatore e il motore. Analogamente, le interfacce disponibili per il motore per gestire i problemi di runtime sono anche interne (alcune eccezioni esistono sul lato runtime RPC e alcune interfacce DCOM usate dal motore sono esterne).

Due approcci tipici al marshalling sono sempre stati inline e la tecnologia basata sui dati (interpretata). MIDL supporta entrambi i commutatori –Os e –Oi* nei relativi stub generati da C. Inoltre, MIDL può generare le librerie TLB usate dal pacchetto oleautomation. Di conseguenza, una prospettiva degli interni del motore è che è costituita da due parti.

Il primo è un set di routine che gestiscono il ridimensionamento, il marshalling e così via, corrispondenti a oggetti di tipo di dati tipici, ad esempio una struttura o una matrice. Queste routine sono ottimizzate per le prestazioni; ad esempio, tentano in genere di bloccare i dati di copia in blocco, ovunque possibile. Questa parte viene spesso definita motore NDR principale.

La seconda parte è costituita da un interprete e dai suoi pezzi correlati. L'interprete usa routine dal motore NDR principale, come se da una libreria interna, per eseguire una chiamata remota con tutti i relativi argomenti marshallati e non separati, come appropriato.

Il motore NDR principale viene usato in modo analogo se usato dagli stub inline o dall'interprete. Tutte le routine del motore di base dipendono dallo stato passato da una struttura di messaggi stub. La struttura viene configurata in modo appropriato dallo stub inline o dall'interprete. Nel corso degli anni il motore di base era stato usato in un contesto diverso; attualmente l'interprete è un set di diversi cicli interpreti distinti. Questi sono correlati agli interpreti precedenti e nuovi (–Oi e –Oif), nonché ai cicli correlati alla serializzazione dei dati (selezione), al supporto asincrono RPC e al supporto asincrono DCOM (RPC e DCOM hanno modelli di programmazione asincroni diversi).

Oltre all'aggiunta di nuove funzionalità, un aspetto importante dell'evoluzione del motore NDR è un cambiamento generale nell'approccio agli interpreti. NDR versione1.1 iniziò come parte di un nuovo approccio MIDL 2.0 al marshalling, con gli stub inline preferiti per le considerazioni sulle prestazioni. Con la versione più recente di NDR, –Oif è diventata la modalità più ampiamente usata del compilatore, quasi all'esclusione degli stub inline.

I descrittori di stringa di formato del motore di rete RPC sono descritti in modo più dettagliato negli argomenti seguenti: