IClassFactory::CreateInstance
9/8/2008
Esse método cria um não inicializado objeto de um identificador especificado classe (CLSID).
Syntax
HRESULT CreateInstance(
IUnknown* pUnkOuter,
REFIID riid,
void** ppvObject
);
Parameters
- pUnkOuter
[no] Se o objeto for que está sendo criado como parte de um agregado, ponteiro para o controle IUnknown interface do agregado. Caso contrário, pUnkOuter deve ser NULL.
riid
[no] Referência ao identificador da interface a ser usado para se comunicar com o objeto recém-criado.Se pUnkOuter é NULL, este parâmetro é freqüentes de IID da interface de inicialização.
Se pUnkOuter não-NULL, riid Deve ser IID_IUnknown (definido no cabeçalho como o IID para IUnknown).
ppvObject
[out] Ponteiro para uma variável ponteiro que recebe o ponteiro interface solicitado no riid.Após bem-sucedido retornar *ppvObject Contém o ponteiro interface solicitada.
Se o objeto não suporte a interface especificado em riid, a implementação deve definir *ppvObject para NULL.
Return Value
Este método oferece suporte a padrão retornam valores E_UNEXPECTED, E_OUTOFMEMORY e E_INVALIDARG. A seguinte tabela mostra os adicionais retornam valores para este método.
Valor | Descrição |
---|---|
S_OK |
O objeto especificado foi criado. |
CLASS_E_NOAGGREGATION |
O pUnkOuter parâmetro foi não-NULL e o objeto não suporte agregação. |
E_NOINTERFACE |
O objeto que ppvObject Aponta para não suporte a interface identificado por riid. |
Remarks
O IClassFactory interface está sempre ativado um objeto classe. O CreateInstance método cria um não inicializado objeto da classe identificado com o CLSID especificado. Quando um objeto é criado dessa maneira, o CLSID deve ser registrado no Registro sistema com o CoRegisterClassObject função.
O pUnkOuter parâmetro indica se o objeto está sendo criado como parte de um agregado. Definições de objetos não são exigido para agregação suporte — eles devem ser especificamente projetados e implementados para suporte-lo.
O riid parâmetro especifica o identificador interface (IID) da interface através da qual você irá se comunicar com o novo objeto.
Se pUnkOuter não-NULL (que indica a agregação), o valor da riid parâmetro deve ser IID_IUnknown.
Se o objeto não fizer parte de um agregado, riid Normalmente especifica a interface embora que o objeto será inicializado.
Para embeddings OLE, é a interface inicialização IPersistStorage, mas em outras situações, outras interfaces são usados.
Para inicializar o objeto, deve haver um chamar subseqüente para um apropriado método na interface de inicialização.
Incluem funções inicialização comum IPersistStorage::InitNew (Para novo, em branco Embeddable Componentes), IPersistStorage::Load (Para recarregado Embeddable componentes).
Em geral, se um aplicativo oferece suporte a apenas uma classe de objetos, e o objeto classe está registrado para uso único, apenas um objeto pode ser criado.
O aplicativo não deve criar outros objetos, e uma solicitação fazer isso deve retornar um erro de IClassFactory::CreateInstance.
O mesmo é verdadeiro para aplicativos que suporte múltiplo classes, cada qual com um objeto classe registrado para uso único; Um CreateInstance Para uma classe seguido por um CreateInstance Para qualquer um das classes deve retornar um erro.
Para determinar se a plataforma oferece suporte a esta interface, consulte Determinando suporte COM APIs.
Requirements
Header | ocidl.h, ocidl.idl |
Library | ole32.lib, uuid.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
IClassFactory
IUnknown
IPersistStorage
IPersistStorage::InitNew
IPersistStorage::Load