다음을 통해 공유


COM 라이브러리 초기화

COM을 사용하는 모든 Windows 프로그램은 CoInitializeEx 함수를 호출하여 COM 라이브러리를 초기화해야 합니다. COM 인터페이스를 사용하는 각 스레드는 이 함수를 별도로 호출해야 합니다. CoInitializeEx에는 다음 서명이 있습니다.

HRESULT CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);

첫 번째 매개 변수는 예약되어 있으며 NULL이어야 합니다. 두 번째 매개 변수는 프로그램에서 사용할 스레딩 모델을 지정합니다. COM은 ‘아파트 스레드’ 및 ‘다중 스레드’의 두 가지 스레딩 모델을 지원합니다. 아파트 스레딩을 지정하는 경우 다음이 보장됩니다.

  • 단일 스레드에서 각 COM 개체에 액세스하게 되며 여러 스레드 간에 COM 인터페이스 포인터를 공유하지 않습니다.
  • 스레드에는 메시지 루프가 있습니다. (모듈 1의 창 메시지를 참조하세요.)

이러한 제약 조건 중 하나가 true가 아닌 경우 다중 스레드 모델을 사용합니다. 스레딩 모델을 지정하려면 dwCoInit 매개 변수에서 다음 플래그 중 하나를 설정합니다.

플래그 설명
COINIT_APARTMENTTHREADED 아파트 스레드.
COINIT_MULTITHREADED 다중 스레드.

 

이러한 플래그 중 정확히 하나를 설정해야 합니다. 일반적으로 창을 만드는 스레드는 COINIT_APARTMENTTHREADED 플래그를 사용해야 하며 다른 스레드는 COINIT_MULTITHREADED를 사용해야 합니다. 그러나 일부 COM 구성 요소에는 특정 스레딩 모델이 필요합니다.

참고 항목

실제로 아파트 스레딩을 지정하더라도 ‘마샬링’이라는 기술을 사용하여 스레드 간에 인터페이스를 공유할 수 있습니다. 마샬링은 이 모듈에서 다루지 않습니다. 중요한 점은 아파트 스레딩을 사용하면 인터페이스 포인터를 다른 스레드에 복사하면 안된다는 것입니다. COM 스레딩 모델에 대한 자세한 내용은 프로세스, 스레드 및 아파트를 참조하세요.

 

이미 언급된 플래그 외에도 dwCoInit 매개 변수에서 COINIT_DISABLE_OLE1DDE 플래그를 설정하는 것이 좋습니다. 이 플래그를 설정하면 사용되지 않는 기술인 OLE(개체 연결 및 포함) 1.0과 관련된 오버헤드가 어느 정도 방지됩니다.

아파트 스레딩을 위해 COM을 초기화하는 방법은 다음과 같습니다.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

HRESULT 반환 형식에는 오류 또는 성공 코드가 포함되어 있습니다. 다음 섹션에서는 COM 오류 처리를 살펴보겠습니다.

COM 라이브러리 초기화 취소

CoInitializeEx를 성공적으로 호출할 때마다 스레드가 종료되기 전에 CoUninitialize를 호출해야 합니다. 이 함수는 매개 변수를 사용하지 않으며 반환 값이 없습니다.

CoUninitialize();

다음

COM의 오류 코드