CoInitializeEx
9/8/2008
Essa função inicializa a Modelo de Objeto Componente (COM) para uso pelo atual segmento. Os aplicativos são exigido para usar CoInitializeEx antes de eles fazem quaisquer outras chamadas biblioteca COM Except for alocação de memória funções.
Syntax
HRESULT CoInitializeEx(
LPVOID pvReserved,
DWORD dwCoInit
);
Parameters
- pvReserved
[no] Reservado; Definir como NULL.
- dwCoInit
[no] Especifica as opções de simultaneidade modelo e inicialização para o segmento. Este parâmetro pode ser definido como COINIT_MULTITHREADED ou COINIT_APARTMENTTHREADED.
Return Value
S_OK indica que a biblioteca COM foi inicializada com êxito. S_FALSE indica que a biblioteca COM já foi inicializada. O padrão de retorno também são valores E_INVALIDARG, E_OUTOFMEMORY e E_UNEXPECTED com suporte.
Remarks
Um segmento deve chamar CoInitializeEx Antes chamado qualquer outra função biblioteca COM, exceto CoGetMalloc função e outra alocação memória chama, como CoTaskMemAlloc, CoTaskMemFree, CoTaskMemRealloce o IMalloc Métodos em alocação de tarefa fornecido pelo CoGetMalloc.
Depois que o modelo de simultaneidade para um segmento é definido, ele não pode ser alterado. Um chamar para CoInitializeEx Em um segmento que anteriormente foi inicializado com um modelo diferente simultaneidade irá falhar e retornar RPC_E_CHANGED_MODE.
CoInitializeEx deve ser chamado at least uma vez e é normalmente chamado apenas uma vez, para cada segmento que usa a biblioteca COM. Várias chamadas para CoInitializeEx Pelo mesmo segmento são permitidas como tempo à medida que elas transmitir o sinalizador de simultaneidade mesmo, mas válido subseqüentes chamadas de retorno S_FALSE. Para fechar a biblioteca COM normalmente em um segmento, cada bem-sucedido chamar para CoInitializeEx, incluindo qualquer chamar que retorna S_FALSE, deve ser balanceado por um correspondente chamar para CoUninitialize.
Se nenhum modelo de simultaneidade for especificado, o dwCoInit parâmetro, o usar como padrão é COINIT_MULTITHREADED.
Objetos criados em um compartimento segmentação única (STA) receber chamadas método somente a partir segmento de seus compartimento, portanto, são chamadas serializado e chegam somente mensagem-limites fila quando a função Microsoft Win32 PeekMessage Ou SendMessage é chamado.
Objetos criados em um segmento COM em um compartimento multithread (MTA) devem poder receber chamadas método de outros segmentos a qualquer momento. Você faria implementar geralmente alguma forma de controle de simultaneidade em um de vários segmentos codificar do objeto usando primitivos sincronização Win32 such as crítico seções, semáforos e semáforos de exclusão mútua para ajudar a proteger dados do objeto a.
CoInitializeEx Fornece a mesma funcionalidade que CoInitialize e também fornece um parâmetro para especificar explicitamente modelo de simultaneidade do segmento. A atual implementação de CoInitialize Chamadas CoInitializeEx e Especifica o modelo de simultaneidade como único-segmento apartamento. Aplicativos desenvolvidos hoje devem chamar CoInitializeEx Em vez de CoInitialize.
Porque as tecnologias OLE não são thread-safe, o OleInitialize função chamadas CoInitializeEx Com o sinalizador COINIT_APARTMENTTHREADED. Como resultado, um compartimento que é inicializado para de vários segmentos simultaneidade objeto não é possível usar os recursos habilitado pelo OleInitialize.
Porque não existe nenhuma maneira para controle a ordem na qual no-processo servidores são carregados ou descarregados, ele não é seguro para chamar CoInitialize, CoInitializeEx, ou CoUninitialize a partir de DllMain função.
Para determinar se a plataforma oferece suporte a essa função, consulte Determinando suporte COM APIs.
Requirements
Header | objbase.h |
Library | ole32.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
CoGetMalloc
CoTaskMemAlloc
CoTaskMemFree
CoTaskMemRealloc
CoUninitialize