다음을 통해 공유


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

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

설명

CoInitializeEx 는 COM 라이브러리를 사용하는 각 스레드에 대해 한 번 이상 호출되어야 하며 일반적으로 한 번만 호출됩니다. 동일한 스레드에서 CoInitializeEx에 대한 여러 호출은 동일한 동시성 플래그를 전달하는 한 허용되지만 후속 유효한 호출은 S_FALSE 반환합니다. 스레드에서 COM 라이브러리를 정상적으로 닫려면 S_FALSE 반환하는 호출을 포함하여 CoInitialize 또는 CoInitializeEx에 대한 각 성공적인 호출은 CoUninitialize에 대한 해당 호출로 균형을 유지해야 합니다.

CoGetMalloc를 제외한 라이브러리 함수를 호출하기 전에 스레드에서 COM 라이브러리를 초기화하여 표준 할당자 및 메모리 할당 함수에 대한 포인터를 가져와야 합니다.

그렇지 않으면 COM 함수는 CO_E_NOTINITIALIZED 반환합니다.

스레드에 대한 동시성 모델을 설정한 후에는 변경할 수 없습니다. 이전에 다중 스레드로 초기화된 아파트에서 CoInitialize에 대한 호출이 실패하고 RPC_E_CHANGED_MODE 반환됩니다.

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

추가 정보

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