Funzione CoCreateInstanceEx (combaseapi.h)
Crea un'istanza di una classe specifica in un computer specifico.
Sintassi
HRESULT CoCreateInstanceEx(
[in] REFCLSID Clsid,
[in] IUnknown *punkOuter,
[in] DWORD dwClsCtx,
[in] COSERVERINFO *pServerInfo,
[in] DWORD dwCount,
[in, out] MULTI_QI *pResults
);
Parametri
[in] Clsid
CLSID dell'oggetto da creare.
[in] punkOuter
Se questo parametro non è NULL, indica che l'istanza viene creata come parte di un'aggregazione e punkOuter deve essere usato come controllo di IUnknown della nuova istanza. L'aggregazione non è attualmente supportata tra processi o tra computer. Quando si crea un'istanza di un oggetto fuori processo, CLASS_E_NOAGGREGATION verrà restituito se punkOuter è diverso da NULL.
[in] dwClsCtx
Valore dell'enumerazione CLSCTX .
[in] pServerInfo
Informazioni sul computer in cui creare un'istanza dell'oggetto. Vedere COSERVERINFO. Questo parametro può essere NULL, nel qual caso viene creata un'istanza dell'oggetto nel computer locale o nel computer specificato nel Registro di sistema con il valore RemoteServerName della classe, in base all'interpretazione del parametro dwClsCtx .
[in] dwCount
Numero di strutture in pResults. Questo valore deve essere maggiore di 0.
[in, out] pResults
Matrice di strutture MULTI_QI . Ogni struttura ha tre membri: l'identificatore per un'interfaccia richiesta (pIID), la posizione in cui restituire il puntatore di interfaccia (pItf) e il valore restituito della chiamata a QueryInterface (hr).
Valore restituito
Questa funzione può restituire il valore restituito standard E_INVALIDARG, nonché i valori seguenti.
Codice restituito | Descrizione |
---|---|
|
Indica l'esito positivo dell'operazione. |
|
Una classe specificata non è registrata nel database di registrazione. Può anche indicare che il tipo di server richiesto nell'enumerazione CLSCTX non è registrato o i valori per i tipi di server nel Registro di sistema sono danneggiati. |
|
Questa classe non può essere creata come parte di un'aggregazione. |
|
Almeno una, ma non tutte le interfacce richieste nella matrice pResults sono state recuperate correttamente. Il membro hr di ognuna delle strutture MULTI_QI in pResults indica con S_OK o E_NOINTERFACE se è stata restituita l'interfaccia specifica. |
|
Nessuna delle interfacce richieste nella matrice pResults è stata recuperata correttamente. |
Commenti
CoCreateInstanceEx crea un singolo oggetto non inizializzato associato al CLSID specificato in un computer remoto specificato. Si tratta di un'estensione della funzione CoCreateInstance, che crea un oggetto solo nel computer locale. Inoltre, anziché richiedere una singola interfaccia e ottenere un singolo puntatore a tale interfaccia, CoCreateInstanceEx consente di specificare una matrice di strutture, ognuna che punta a un identificatore di interfaccia (IID) sull'input e, in caso di restituzione, contenente (se disponibile) un puntatore all'interfaccia richiesta e il valore restituito della chiamata QueryInterface per tale interfaccia. Ciò consente un minor numero di round trip tra i computer.
Questa funzione incapsula tre chiamate: per prima cosa, a CoGetClassObject per connettersi all'oggetto classe associato al CLSID specificato, specificando la posizione della classe; in secondo luogo, a IClassFactory::CreateInstance per creare un'istanza non inizializzata e infine a IClassFactory::Release, per rilasciare l'oggetto classe.
L'oggetto creato deve comunque essere inizializzato tramite una chiamata a una delle interfacce di inizializzazione, ad esempio IPersistStorage::Load. Due funzioni, CoGetInstanceFromFile e CoGetInstanceFromIStorage incapsulano sia la creazione dell'istanza che l'inizializzazione dalle origini ovvie.
La struttura COSERVERINFO passata come parametro pServerInfo contiene le impostazioni di sicurezza che COM userà durante la creazione di una nuova istanza dell'oggetto specificato. Si noti che questo parametro non influisce sulle impostazioni di sicurezza usate durante l'esecuzione di chiamate al metodo sull'oggetto di cui è stata creata un'istanza. Queste impostazioni di sicurezza sono configurabili, per ogni interfaccia, con la funzione CoSetProxyBlanket . Vedere anche IClientSecurity::SetBlanket.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | combaseapi.h (include Objbase.h) |
Libreria | Ole32.lib |
DLL | Ole32.dll |