CoInitialize 함수(objbase.h)
현재 스레드에서 COM 라이브러리를 초기화하고 동시성 모델을 STA(단일 스레드 아파트)로 식별합니다.
새 애플리케이션은 CoInitialize 대신 CoInitializeEx 를 호출해야 합니다.
Windows 런타임 사용하려면 RoInitialize 또는 Windows::Foundation::Initialize를 대신 호출해야 합니다.
구문
HRESULT CoInitialize(
[in, optional] LPVOID pvReserved
);
매개 변수
[in, optional] pvReserved
이 매개 변수는 예약되어 있으며 NULL이어야 합니다.
반환 값
이 함수는 다음 값뿐만 아니라 E_INVALIDARG, E_OUTOFMEMORY 및 E_UNEXPECTED 표준 반환 값을 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
COM 라이브러리가 이 스레드에서 성공적으로 초기화되었습니다. |
|
COM 라이브러리는 이 스레드에서 이미 초기화되어 있습니다. |
|
CoInitializeEx에 대한 이전 호출은 이 스레드의 동시성 모델을 MTA(다중 스레드 아파트)로 지정했습니다. 이는 중립 스레드 아파트에서 단일 스레드 아파트로의 변경이 발생했음을 나타낼 수도 있습니다. |
설명
표준 할당자 및 메모리 할당 함수에 대한 포인터를 얻으려면 CoGetMalloc를 제외한 라이브러리 함수를 호출하기 전에 스레드에서 COM 라이브러리를 초기화해야 합니다.
스레드에 대한 동시성 모델을 설정한 후에는 변경할 수 없습니다. 이전에 다중 스레드로 초기화된 아파트에서 CoInitialize 를 호출하면 실패하고 RPC_E_CHANGED_MODE 반환됩니다.
CoInitializeEx 는 CoInitialize 와 동일한 기능을 제공하며 스레드의 동시성 모델을 명시적으로 지정하는 매개 변수도 제공합니다. CoInitialize 는 CoInitializeEx 를 호출하고 동시성 모델을 단일 스레드 아파트로 지정합니다. 현재 개발된 애플리케이션은 CoInitialize 대신 CoInitializeEx를 호출해야 합니다.
일반적으로 COM 라이브러리는 스레드에서 한 번만 초기화됩니다. 동시성 모델을 변경하려고 시도하지 않고 S_FALSE 반환하는 한 동일한 스레드에서 CoInitialize 또는 CoInitializeEx 에 대한 후속 호출이 성공합니다. COM 라이브러리를 정상적으로 닫려면 S_FALSE 반환하는 라이브러리를 포함하여 CoInitialize 또는 CoInitializeEx에 대한 각 성공적인 호출은 CoUninitialize에 대한 해당 호출을 통해 균형을 유지해야 합니다. 그러나 0으로 CoInitialize (또는 COINIT_APARTMENTTHREADED CoInitializeEx )를 호출하는 애플리케이션의 첫 번째 스레드는 CoUninitialize를 호출할 마지막 스레드여야 합니다. 그렇지 않으면 STA에서 CoInitialize 에 대한 후속 호출이 실패하고 애플리케이션이 작동하지 않습니다.
In Process 서버가 로드되거나 언로드되는 순서를 제어할 방법이 없으므로 DllMain 함수에서 CoInitialize, CoInitializeEx 또는 CoUninitialize를 호출하지 마세요.
요구 사항
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | objbase.h |
라이브러리 | Ole32.lib |
DLL | Ole32.dll |
API 세트 | ext-ms-win-com-sta-l1-1-0(Windows 10 버전 10.0.20166에 도입됨) |