Condividi tramite


Interfaccia IMoniker (objidl.h)

Consente di usare un oggetto moniker che contiene informazioni che identificano in modo univoco un oggetto COM. Un oggetto che dispone di un puntatore all'interfaccia IMoniker dell'oggetto moniker può individuare, attivare e ottenere l'accesso all'oggetto identificato senza avere altre informazioni specifiche sulla posizione in cui l'oggetto si trova effettivamente in un sistema distribuito.

I monikers vengono usati come base per il collegamento in COM. Un oggetto collegato contiene un moniker che identifica l'origine. Quando l'utente attiva l'oggetto collegato per modificarlo, il moniker è associato; carica l'origine del collegamento in memoria.

Ereditarietà

L'interfaccia IMoniker eredita da IPersistStream. IMoniker include anche questi tipi di membri:

Metodi

L'interfaccia IMoniker include questi metodi.

 
IMoniker::BindToObject

Associa all'oggetto specificato. Il processo di associazione comporta la ricerca dell'oggetto, l'inserimento nello stato in esecuzione, se necessario, e la fornitura del chiamante con un puntatore a un'interfaccia specificata nell'oggetto identificato.
IMoniker::BindToStorage

Associa all'archiviazione per l'oggetto specificato. A differenza del metodo IMoniker::BindToObject, questo metodo non attiva l'oggetto identificato dal moniker.
IMoniker::CommonPrefixWith

Crea un nuovo moniker basato sul prefisso che questo moniker ha in comune con il moniker specificato.
IMoniker::ComposeWith

Crea un nuovo moniker composito combinando il moniker corrente con il moniker specificato.
IMoniker::Enum

Recupera un puntatore a un enumeratore per i componenti di un moniker composito.
IMoniker::GetDisplayName

Recupera il nome visualizzato per il moniker.
IMoniker::GetTimeOfLastChange

Recupera il tempo in cui l'oggetto identificato da questo moniker è stato modificato.
IMoniker::Hash

Crea un valore hash usando lo stato interno del moniker.
IMoniker::Inverse

Crea un moniker che è l'inverso di questo moniker. Quando composto a destra di questo moniker o una di struttura simile, il moniker componirà in nulla.
IMoniker::IsEqual

Determina se questo moniker è identico al moniker specificato.
IMoniker::IsRunning

Determina se l'oggetto identificato da questo moniker è attualmente caricato ed in esecuzione.
IMoniker::IsSystemMoniker

Determina se questo moniker è una delle classi moniker fornite dal sistema.
IMoniker::P arseDisplayName

Converte un nome visualizzato in un moniker.
IMoniker::Reduce

Riduce un moniker alla forma più semplice.
IMoniker::RelativePathTo

Crea un moniker relativo tra questo moniker e il moniker specificato.

Commenti

Come un percorso di un file in un file system, un moniker contiene informazioni che consentono a un oggetto COM di trovarsi e attivare. I monikers possono identificare qualsiasi tipo di oggetto COM, da un oggetto documento archiviato in un file a una selezione all'interno di un oggetto incorporato. COM fornisce un set di classi moniker che consentono di creare oggetti moniker che identificano gli oggetti più comunemente trovati nel sistema. Ad esempio, potrebbe essere presente un oggetto che rappresenta un intervallo di celle in un foglio di calcolo incorporato in un documento di testo archiviato in un file. In un sistema distribuito, il moniker dell'oggetto identifica la posizione del sistema dell'oggetto, la posizione fisica del file nel sistema, l'archiviazione dell'oggetto incorporato all'interno di tale file e infine la posizione dell'intervallo di celle all'interno dell'oggetto incorporato.

Un oggetto moniker supporta l'interfaccia IMoniker , derivata dall'interfaccia IPersistStream e identifica in modo univoco un singolo oggetto nel sistema. Dopo che un oggetto che fornisce un moniker ha creato l'oggetto moniker, queste informazioni non possono essere modificate all'interno di tale oggetto. Se il provider moniker modifica le informazioni, può farlo solo creando un nuovo oggetto moniker, che identifica in modo univoco l'oggetto in questione.

I monikers hanno le due funzionalità importanti seguenti:

  • I monikers possono essere salvati in un archivio permanente. Quando un moniker viene caricato nuovamente in memoria, identifica ancora lo stesso oggetto.
  • I moniker supportano un'operazione denominata binding, ovvero il processo di individuazione dell'oggetto denominato dal moniker, l'attivazione (caricamento in memoria) se non è già attiva e restituisce un puntatore a un'interfaccia richiesta su tale oggetto.

Implementazione anti-Moniker

Gli anti-monikers sono l'inverso delle implementazioni COM di file, elemento e moniker puntatore. Vale a dire, un moniker anti-moniker composto a destra di un moniker di file, un moniker dell'elemento o un moniker puntatore compone in nulla.

Se si è un client moniker, in genere non è necessario usare anti-moniker. Quando è necessario l'inverso di un moniker, è necessario chiamare IMoniker::Inverse. Ad esempio, se è necessario un inverso per rimuovere l'ultimo pezzo di un moniker composito, usare IMoniker::Enum per enumerare le parti del moniker e chiamare Inverse sul pezzo più destro. Non è consigliabile usare un moniker anti-moniker per questo scopo perché non è possibile assicurarsi che il pezzo più giusto di un composito consideri un anti-moniker che sia il suo inverso.

L'unica situazione in cui è necessario usare in modo esplicito un moniker anti-moniker è quando si scrive una nuova classe moniker e non si hanno requisiti speciali per la costruzione di inversa ai moniker. In tale situazione, è possibile restituire anti-moniker dall'implementazione di Inverse. Nell'implementazione di IMoniker::ComposeWith, dovresti quindi annidare uno dei tuoi moniker per ogni anti-moniker che incontri.

Usare la funzione CreateAntiMoniker per creare questi moniker.

Implementazione di Moniker di classe

I moniker di classe sono moniker che rappresentano una classe oggetto. I moniker di classe vengono associati all'oggetto classe della classe per cui vengono creati.

I moniker di classe sono più utili nella composizione con altri tipi di moniker, ad esempio moniker di file o moniker di elementi. I moniker di classe possono anche essere composti a destra di moniker che supportano l'associazione all'interfaccia IClassActivator . Ciò consente a IClassActivator di fornire l'accesso all'oggetto classe e alle istanze della classe.

Per usare i moniker di classe, è necessario usare la funzione CreateClassMoniker per creare questi moniker.

Implementazione di File Moniker

I moniker dei file sono moniker che rappresentano un percorso nel file system; un moniker file può identificare qualsiasi oggetto salvato nel proprio file. Per identificare gli oggetti contenuti in un file, è possibile comporre moniker di altre classi ,ad esempio moniker di elementi, a destra di un moniker di file. Tuttavia, il moniker a sinistra di un moniker di file all'interno di un composito deve essere un altro moniker di file, un moniker anti-moniker o un moniker di classe. È illegale, ad esempio, che un moniker di un elemento venga visualizzato a sinistra di un moniker di file in un composito.

Si noti che un moniker anti-moniker è l'inverso di un moniker intero del file, non l'inverso di un componente del percorso rappresentato dal moniker; ovvero, quando si compone un moniker anti-moniker a destra di un moniker di file, l'intero moniker del file viene rimosso. Se si vuole rimuovere solo il componente più destro del percorso rappresentato da un moniker di file, è necessario creare un moniker di file separato in base al percorso ".." e quindi comporre tale elemento alla fine del moniker del file.

Un client moniker (usando un moniker per ottenere un puntatore di interfaccia a un oggetto) non deve in genere conoscere la classe del moniker; può semplicemente chiamare metodi usando un puntatore dell'interfaccia IMoniker .

Un provider moniker (la distribuzione di moniker che identifica i relativi oggetti per renderli accessibili ai client moniker) deve usare moniker di file se gli oggetti che identificano vengono archiviati nei file. Se ogni oggetto risiede nel proprio file, i moniker dei file sono l'unico tipo necessario. Se gli oggetti identificati sono più piccoli di un file, è necessario usare un altro tipo di moniker (ad esempio, monikers di elementi) oltre ai moniker di file.

Per usare i moniker dei file, è necessario usare la funzione CreateFileMoniker per creare i monikers. Per consentire il caricamento degli oggetti quando è associato un moniker di file, gli oggetti devono implementare l'interfaccia IPersistFile .

L'esempio più comune di provider moniker sono applicazioni server COM che supportano il collegamento. Se l'applicazione server COM supporta il collegamento solo ai documenti basati su file nell'intera durata, i moniker di file sono l'unico tipo di moniker necessario. Se l'applicazione server COM supporta il collegamento a oggetti più piccoli di un documento (ad esempio sezioni di un documento o oggetti incorporati), è necessario usare moniker di elementi e moniker di file.

Implementazione generica del moniker composito

Un moniker composito generico è un moniker composito i cui componenti non hanno alcuna conoscenza speciale tra loro.

La composizione è il processo di unione di due moniker insieme. A volte due moniker di classi specifiche possono essere combinati in modo speciale; ad esempio, un moniker di file che rappresenta un percorso incompleto e un altro moniker di file che rappresenta un percorso relativo può essere combinato per formare un singolo moniker di file che rappresenta il percorso completo. Questo è un esempio di composizione nongenerica. La composizione generica, d'altra parte, può connettere qualsiasi due moniker, indipendentemente dalle classi. Poiché una composizione non generica dipende dalla classe dei moniker coinvolti, può essere eseguita solo dall'implementazione di una determinata classe del metodo IMoniker::ComposeWith . È possibile definire nuovi tipi di composizioni non generiche se si scrive una nuova classe moniker. Al contrario, le composizioni generiche vengono eseguite dalla funzione CreateGenericComposite .

Un client moniker (usando un moniker per ottenere un puntatore di interfaccia a un oggetto) in genere non deve conoscere la classe del moniker o se si tratta di un composito generico o non generico composito; può semplicemente chiamare metodi usando un puntatore all'interfaccia IMoniker .

Un provider di moniker (distribuzione di moniker che identificano i relativi oggetti per renderli accessibili ai client moniker) potrebbe dover comporre due moniker insieme. Ad esempio, se si usa un moniker di elemento per identificare un oggetto, è necessario componerlo con il moniker che identifica il contenitore dell'oggetto prima di distrarlo. Utilizzare il metodo IMoniker::ComposeWith per eseguire questa operazione, chiamando il metodo sul primo moniker e passando il secondo moniker come parametro; questo metodo può produrre un composito generico o non generico.

L'unica volta che è necessario creare in modo esplicito un moniker composito generico è quando si scrive una classe moniker personalizzata. Nell'implementazione di IMoniker::ComposeWith, è consigliabile tentare di eseguire una composizione non generica quando possibile; se non è possibile eseguire una composizione non generica e la composizione generica è accettabile, è possibile chiamare la funzione CreateGenericComposite per creare un moniker composito generico.

Implementazione del moniker dell'elemento

I moniker elemento vengono usati per identificare gli oggetti all'interno di contenitori, ad esempio una parte di un documento, un oggetto incorporato all'interno di un documento composto o un intervallo di celle all'interno di un foglio di calcolo. I moniker degli elementi vengono spesso usati in combinazione con moniker di file; Un moniker di file viene usato per identificare il contenitore mentre viene usato un moniker dell'elemento per identificare l'elemento all'interno del contenitore.

Un moniker di elemento contiene una stringa di testo; questa stringa viene utilizzata dall'oggetto contenitore per distinguere l'elemento contenuto dagli altri. L'oggetto contenitore deve implementare l'interfaccia IOleItemContainer ; questa interfaccia consente al codice del moniker dell'elemento di acquisire un puntatore a un oggetto, dato solo la stringa che identifica l'oggetto.

Un client moniker (usando un moniker per ottenere un puntatore di interfaccia a un oggetto) in genere non deve conoscere la classe del moniker; chiama semplicemente i metodi usando un puntatore all'interfaccia IMoniker .

Un provider di moniker (distribuzione di moniker che identificano i relativi oggetti per renderli accessibili ai client moniker) deve usare moniker di elemento se gli oggetti identificati sono contenuti all'interno di un altro oggetto e possono essere identificati singolarmente usando una stringa. Usare un altro tipo di moniker (ad esempio, moniker di file) per identificare l'oggetto contenitore.

Per usare i moniker elemento, è necessario usare la funzione CreateItemMoniker per creare i moniker. Per consentire il caricamento degli oggetti quando è associato un moniker di elemento, il contenitore degli oggetti deve implementare l'interfaccia IOleItemContainer .

L'esempio più comune di provider di moniker sono applicazioni COM che supportano il collegamento. Se l'applicazione COM supporta il collegamento a oggetti più piccoli di un documento basato su file, è necessario usare i moniker degli elementi. Per un'applicazione server che consente il collegamento a una selezione all'interno di un documento, usare i moniker dell'elemento per identificare tali oggetti. Per un'applicazione contenitore che consente il collegamento a oggetti incorporati, usare i moniker dell'elemento per identificare gli oggetti incorporati.

Implementazione del moniker OBJREF

I moniker OBJREF rappresentano un riferimento a un'istanza di oggetto in esecuzione in un server out-of-process, in locale o in remoto. Il moniker identifica l'istanza dell'oggetto e il computer in cui è in esecuzione l'oggetto.

Un moniker OBJREF è simile in molti modi a un moniker puntatore, ad eccezione del fatto che l'oggetto in esecuzione è out-of-process. Un client può chiamare IMoniker::BindToObject su un moniker OBJREF e usare il puntatore ottenuto per accedere all'oggetto in esecuzione, indipendentemente dalla relativa posizione.

Una distinzione importante da un moniker puntatore è che il nome visualizzato di un moniker OBJREF può essere incorporato in una pagina HTML e l'oggetto in esecuzione rappresentato dal moniker può essere associato da uno script client, un applet o un controllo ActiveX.

L'uso principale per un moniker OBJREF consiste nel ottenere l'accesso a un'istanza di oggetto in esecuzione su Internet. Una pagina server attiva o altri mezzi per generare contenuto HTML dinamico inserisce il nome visualizzato di un moniker OBJREF in un parametro in un applet o un controllo ActiveX. Il codice dell'applet o del controllo chiama la funzione CreateObjrefMoniker per creare un moniker OBJREF in base al nome visualizzato e quindi chiama IMoniker::BindToObject sul moniker OBJREF risultante per ottenere l'accesso all'istanza dell'oggetto in esecuzione. La pagina del server attivo esegue quindi il marshalling di un puntatore all'oggetto in esecuzione al client della pagina.

Implementazione del moniker puntatore

Un moniker puntatore esegue essenzialmente il wrapping di un puntatore di interfaccia in modo che abbia un aspetto simile a un moniker e possa essere passato a tali interfacce che richiedono moniker. L'associazione di un moniker del puntatore viene eseguita chiamando il metodo QueryInterface del puntatore.

Le istanze dei moniker puntatore rifiutano di essere serializzate; ovvero IPersistStream::Save restituirà un errore. Questi moniker, tuttavia, possono essere sottoposto a marshalling a un processo diverso in una chiamata RPC; internamente, il sistema effettua il marshalling e rimuove il puntatore usando il paradigma standard per il marshalling dei puntatori di interfaccia.

I moniker puntatore sono raramente necessari. Usare moniker puntatore solo se sono necessari moniker per identificare gli oggetti che non dispongono di rappresentazione persistente. I moniker puntatore consentono a tali oggetti di partecipare a un'operazione di associazione moniker.

Implementazione del moniker URL

L'implementazione del moniker URL di IMoniker si trova in un oggetto moniker URL, che supporta anche IUnknown e l'interfaccia IAsyncMoniker . L'interfaccia IMoniker eredita la definizione da IPersistStream e IUnknown e IPersistStream eredita da IPersist. Di conseguenza, l'implementazione di IMoniker include il supporto per IPersistStream e IPersist.

L'interfaccia IAsyncMoniker è semplicemente IUnknown. Non sono disponibili metodi aggiuntivi. Viene usato per consentire ai client di determinare se un moniker supporta l'associazione asincrona.

Per ottenere un puntatore all'interfaccia IMoniker in questo oggetto, chiamare la funzione CreateURLMonikerEx .

Un client moniker (usando un moniker per ottenere un puntatore di interfaccia a un oggetto) non deve in genere conoscere la classe del moniker in uso; chiama semplicemente i metodi usando un puntatore all'interfaccia IMoniker .

Un provider di moniker (distribuzione di moniker che identificano i relativi oggetti per renderli accessibili ai client moniker) deve usare moniker di elemento se gli oggetti identificati sono contenuti all'interno di un altro oggetto e possono essere identificati singolarmente usando una stringa. Sarà anche necessario usare un altro tipo di moniker (ad esempio, moniker di file) per identificare l'oggetto contenitore.

Per usare i moniker elemento, è necessario usare la funzione CreateItemMoniker per creare i moniker. Per consentire il caricamento degli oggetti quando è associato un moniker di elemento, il contenitore degli oggetti deve implementare l'interfaccia IOleItemContainer .

L'esempio più comune di provider di moniker sono applicazioni COM che supportano il collegamento. Se l'applicazione COM supporta il collegamento a oggetti più piccoli di documenti basati su file, è necessario usare i moniker degli elementi. Per un'applicazione server che consente il collegamento a una selezione all'interno di un documento, usare i moniker dell'elemento per identificare tali oggetti. Per un'applicazione contenitore che consente il collegamento a oggetti incorporati, usare i moniker dell'elemento per identificare gli oggetti incorporati.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione objidl.h

Vedi anche

CreateAntiMoniker

CreateClassMoniker

CreateFileMoniker

CreateGenericComposite

CreateItemMoniker

CreateObjrefMoniker

CreateURLMonikerEx

Moniker