Accesso alle interfacce tra appartamenti

COM consente a qualsiasi appartamento in un processo di ottenere l'accesso a un'interfaccia implementata su un oggetto in qualsiasi altro appartamento del processo. Questa operazione viene eseguita tramite l'interfaccia IGlobalInterfaceTable . Questa interfaccia include tre metodi, che consentono di eseguire le operazioni seguenti:

  • Registrare un'interfaccia come interfaccia globale (a livello di processo).
  • Ottenere un puntatore a tale interfaccia da qualsiasi altro appartamento tramite un cookie.
  • Revocare la registrazione globale di un'interfaccia.

L'interfaccia IGlobalInterfaceTable è un modo efficiente per un processo per archiviare un puntatore di interfaccia in una posizione di memoria accessibile da più appartamenti all'interno del processo, ad esempio variabili a livello di processo e oggetti Agile (oggetti a thread libero, con marshalling) contenenti puntatori di interfaccia ad altri oggetti.

Un oggetto Agile non è a conoscenza dell'infrastruttura COM sottostante in cui viene eseguita; in altre parole, l'apartment, il contesto e il thread su cui è in esecuzione. L'oggetto può essere in possesso di interfacce specifiche di un appartamento o di un contesto. Per questo motivo, la chiamata di queste interfacce da qualsiasi posizione in cui viene eseguito il componente Agile potrebbe non funzionare sempre correttamente. La tabella dell'interfaccia globale evita questo problema garantendo che venga usato un proxy valido (o puntatore diretto) all'oggetto, in base alla posizione in cui è in esecuzione l'oggetto Agile.

Nota

La tabella dell'interfaccia globale non è portabile attraverso i limiti del processo o del computer, pertanto non può essere usata al posto del normale meccanismo di passaggio dei parametri.

 

Per informazioni sulla creazione e l'uso di una tabella di interfaccia globale, vedere gli argomenti seguenti:

Scelta del modello di threading

Appartamenti multithreading

Problemi di threading del server in-process

Processi, thread e appartamenti

Comunicazione a thread singolo e multithreading

Appartamenti a thread singolo