다음을 통해 공유


COM 라이브러리

COM을 사용하는 모든 프로세스는 COM 라이브러리를 초기화하고 초기화하지 않아야 합니다. COM은 사양 외에도 이 라이브러리에서 몇 가지 중요한 서비스를 구현합니다. Microsoft Windows에서 DLL 및 EXE(주로 Ole32.dll 및 Rpcss.exe)로 제공되는 COM 라이브러리에는 다음이 포함됩니다.

  • 클라이언트와 서버 모두에서 COM 애플리케이션을 쉽게 만들 수 있는 몇 가지 기본 함수입니다. 클라이언트의 경우 COM은 개체를 만들기 위한 기본 함수를 제공합니다. 서버의 경우 COM은 개체를 노출하는 수단을 제공합니다.

  • COM이 결정하는 구현 로케이터 서비스는 해당 클래스를 구현하는 서버와 해당 서버가 있는 CLSID(고유 클래스 식별자)에서 결정합니다. 이 서비스에는 클라이언트가 향후 변경될 수 있는 패키징과 무관하게 개체 클래스의 ID와 구현 패키징 간의 간접 참조 수준(일반적으로 시스템 레지스트리)에 대한 지원이 포함됩니다.

  • 개체가 로컬 또는 원격 서버에서 실행 중일 때 투명한 원격 프로시저가 호출됩니다.

  • 애플리케이션이 프로세스 내에서 메모리를 할당하는 방법, 특히 제대로 해제할 수 있도록 협력 개체 간에 전달해야 하는 메모리를 제어할 수 있도록 하는 표준 메커니즘입니다.

기본 COM 서비스를 사용하려면 메모리 할당 호출을 제외한 다른 COM 함수를 호출하기 전에 클라이언트 및 Out-of-process 서버에서 실행 중인 모든 COM 스레드가 CoInitialize 또는 CoInitializeEx 함수를 호출해야 합니다. CoInitializeEx 는 다른 함수를 대체하여 스레드의 스레딩 모델(아파트 스레드 또는 자유 스레드)을 지정할 수 있는 매개 변수를 추가합니다. CoInitialize를 호출하면 스레딩 모델이 아파트 스레드로 설정됩니다.

OLE 복합 문서 애플리케이션은 CoInitializeEx 를 호출하고 복합 문서에 필요한 일부 초기화를 수행하는 OleInitialize 함수를 호출합니다. 따라서 OleInitialize 를 호출하는 스레드는 자유 스레드가 될 수 없습니다. 클라이언트 및 서버의 스레딩에 대한 자세한 내용은 프로세스, 스레드 및 아파트를 참조하세요.

In-process 서버는 이미 수행된 프로세스에 로드되고 있으므로 초기화 함수를 호출하지 않습니다. 따라서 InprocServer32 키 아래의 레지스트리에서 프로세스 내 서버가 스레딩 모델을 설정해야 합니다. In-Process 서버의 스레딩 문제에 대한 자세한 내용은 In-Process 서버 스레딩 문제를 참조하세요.

라이브러리를 초기화하지 않는 것도 중요합니다. CoInitialize 또는 CoInitializeEx 호출마다 CoUninitialize에 대한 해당 호출이 있어야 합니다. OleInitialize 호출마다 OleUninitialize대한 해당 호출이 있어야 합니다.

In-Process 서버는 로드되는 프로세스가 이미 이러한 단계를 수행했다고 가정할 수 있습니다.

구성 요소 개체 모델