다음을 통해 공유


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 표준 반환 값을 반환할 수 있습니다.

반환 코드 묘사
S_OK
COM 라이브러리가 이 스레드에서 성공적으로 초기화되었습니다.
S_FALSE
COM 라이브러리는 이 스레드에서 이미 초기화되어 있습니다.
RPC_E_CHANGED_MODE
이전에 coInitializeEx를 호출한 이 스레드에 대해 호환되지 않는 동시성 모델을 지정했습니다. 이것은 또한 중립 스레드 아파트에서 단일 스레드 아파트로의 변경이 발생했음을 나타낼 수 있습니다.

발언

CoInitializeEx 한 번 이상 호출해야 하며 일반적으로 COM 라이브러리를 사용하는 각 스레드에 대해 한 번만 호출됩니다. 동일한 스레드에서 CoInitializeEx 대한 여러 호출은 동일한 동시성 플래그를 전달하는 한 허용되지만 후속 유효한 호출은 S_FALSE 반환합니다. 동시성 플래그가 일치하지 않으면 호출이 실패하고 RPC_E_CHANGED_MODE 반환합니다. (이 규칙의 목적을 위해 CoInitialize 호출은 COINIT_APARTMENTTHREADED 플래그를 사용하여 CoInitializeEx 호출하는 것과 같습니다.) 스레드에서 COM 라이브러리를 정상적으로 초기화하려면 S_FALSE 반환하는 호출을 포함하여 coInitialize 또는 CoInitializeEx성공한 각 호출은CoUninitialize를 호출하여 균형을 유지해야 합니다. 스레드에서 COM을 초기화하지 않은 후에는 위의 제약 조건에 따라 모든 모드에서 다시 초기화할 수 있습니다.

표준 할당자 및 메모리 할당 함수에 대한 포인터를 얻으려면 CoGetMalloc제외한 라이브러리 함수를 호출하기 전에 스레드에서 COM 라이브러리를 초기화해야 합니다. 그렇지 않으면 COM 함수가 CO_E_NOTINITIALIZED 반환합니다.

STA(단일 스레드 아파트)에서 만든 개체는 해당 아파트 스레드에서만 메서드 호출을 수신하므로 호출이 직렬화되고 메시지 큐 경계에만 도착합니다(PeekMessage 또는 SendMessage 함수가 호출될 때).

MTA(다중 스레드 아파트)의 COM 스레드에서 만든 개체는 언제든지 다른 스레드에서 메서드 호출을 받을 수 있어야 합니다. 일반적으로 중요한 섹션, 세마포 또는 뮤텍스와 같은 동기화 기본 형식을 사용하여 다중 스레드 개체의 코드에서 특정 형태의 동시성 제어를 구현하여 개체의 데이터를 보호합니다.

NTA(중립 스레드 아파트)에서 실행되도록 구성된 개체가 STA 또는 MTA에 있는 스레드에 의해 호출되면 해당 스레드는 NTA로 전송됩니다. 이후에 이 스레드가 CoInitializeEx호출하면 호출이 실패하고 RPC_E_CHANGED_MODE 반환됩니다.

OLE 기술은 스레드로부터 안전하지 않으므로 OleInitialize 함수는 COINIT_APARTMENTTHREADED 플래그를 사용하여 CoInitializeEx 호출합니다. 따라서 다중 스레드 개체 동시성을 위해 초기화된 아파트는 OleInitialize사용하도록 설정된 기능을 사용할 수 없습니다.

in process 서버가 로드되거나 언로드되는 순서를 제어할 수 있는 방법이 없으므로 DllMain 함수에서 coInitialize, CoInitializeEx또는 CoUninitialize 호출하지 마세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 combaseapi.h(Objbase.h 포함)
라이브러리 Ole32.lib
DLL Ole32.dll

참고 항목

프로세스, 스레드 및 아파트