CoInitializeEx 함수(combaseapi.h)
호출 스레드에서 사용할 COM 라이브러리를 초기화하고, 스레드의 동시성 모델을 설정하고, 필요한 경우 스레드에 대한 새 아파트를 만듭니다.
Windows 런타임 API를 사용하거나 COM 및 Windows 런타임 구성 요소를 모두 사용하려는 경우 CoInitializeEx 대신 Windows::Foundation::Initialize를 호출하여 스레드를 초기화해야 합니다. Windows::Foundation::Initialize는 COM 구성 요소에 사용하기에 충분합니다.
통사론
HRESULT CoInitializeEx(
[in, optional] LPVOID pvReserved,
[in] DWORD dwCoInit
);
매개 변수
[in, optional] pvReserved
이 매개 변수는 예약되어 있으며 NULL
[in] dwCoInit
스레드에 대한 동시성 모델 및 초기화 옵션입니다. 이 매개 변수의 값은 COINIT 열거형에서 가져옵니다. COINIT_APARTMENTTHREADED 플래그와 COINIT_MULTITHREADED 플래그를 모두 설정할 수 없다는 점을 제외하고 COINIT 값의 조합을 사용할 수 있습니다. 기본값은 COINIT_MULTITHREADED.
반환 값
이 함수는 다음 값뿐만 아니라 E_INVALIDARG, E_OUTOFMEMORY 및 E_UNEXPECTED 표준 반환 값을 반환할 수 있습니다.
반환 코드 | 묘사 |
---|---|
|
COM 라이브러리가 이 스레드에서 성공적으로 초기화되었습니다. |
|
COM 라이브러리는 이 스레드에서 이미 초기화되어 있습니다. |
|
이전에 coInitializeEx를 호출한 이 스레드에 대해 호환되지 않는 동시성 모델을 지정했습니다. 이것은 또한 중립 스레드 아파트에서 단일 스레드 아파트로의 변경이 발생했음을 나타낼 수 있습니다. |
발언
CoInitializeEx 한 번 이상 호출해야 하며 일반적으로 COM 라이브러리를 사용하는 각 스레드에 대해 한 번만 호출됩니다. 동일한 스레드에서 CoInitializeEx 대한 여러 호출은 동일한 동시성 플래그를 전달하는 한 허용되지만 후속 유효한 호출은 S_FALSE 반환합니다.
동시성 플래그가 일치하지 않으면 호출이 실패하고 RPC_E_CHANGED_MODE 반환합니다.
(이 규칙의 목적을 위해
표준 할당자 및 메모리 할당 함수에 대한 포인터를 얻으려면 CoGetMalloc제외한 라이브러리 함수를 호출하기 전에 스레드에서 COM 라이브러리를 초기화해야 합니다. 그렇지 않으면 COM 함수가 CO_E_NOTINITIALIZED 반환합니다.
STA(단일 스레드 아파트)에서 만든 개체는 해당 아파트 스레드에서만 메서드 호출을 수신하므로 호출이 직렬화되고 메시지 큐 경계에만 도착합니다(PeekMessage 또는 SendMessage 함수가 호출될 때).
MTA(다중 스레드 아파트)의 COM 스레드에서 만든 개체는 언제든지 다른 스레드에서 메서드 호출을 받을 수 있어야 합니다. 일반적으로 중요한 섹션, 세마포 또는 뮤텍스와 같은 동기화 기본 형식을 사용하여 다중 스레드 개체의 코드에서 특정 형태의 동시성 제어를 구현하여 개체의 데이터를 보호합니다.
NTA(중립 스레드 아파트)에서 실행되도록 구성된 개체가 STA 또는 MTA에 있는 스레드에 의해 호출되면 해당 스레드는 NTA로 전송됩니다. 이후에 이 스레드가 CoInitializeEx호출하면 호출이 실패하고 RPC_E_CHANGED_MODE 반환됩니다.
OLE 기술은 스레드로부터 안전하지 않으므로
in process 서버가 로드되거나 언로드되는 순서를 제어할 수 있는 방법이 없으므로
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows 2000 Server [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | combaseapi.h(Objbase.h 포함) |
라이브러리 | Ole32.lib |
DLL | Ole32.dll |