다음을 통해 공유


COM 클래스 개체 및 CLSID

COM 서버는 COM 클래스로 구현됩니다. COM 클래스는 지정된 개체와 상호 작용할 때마다 실행되는 코드에서 인터페이스 그룹의 구현입니다. C++ 클래스와 COM 클래스 사이에는 중요한 차이점이 있습니다. C++에서는 클래스가 형식이고, COM 클래스는 단순히 개체의 정의이며 C++ 프로그래머가 C++ 클래스를 사용하여 구현할 수 있지만 형식은 전달하지 않습니다. COM은 특정 클래스의 존재에 대한 지식 없이 작성된 애플리케이션을 포함하여 다양한 애플리케이션에서 클래스를 사용할 수 있도록 설계되었습니다. 따라서 지정된 형식의 개체에 대한 클래스 코드는 DLL(동적 연결 라이브러리) 또는 EXE(다른 실행 파일 애플리케이션)에 있습니다.

각 COM 클래스는 서버가 등록해야 하는 고유한 128비트 GUID인 CLSID로 식별됩니다. COM은 클라이언트의 요청에 따라 이 CLSID를 사용하여 특정 데이터를 클래스를 구현하는 코드가 포함된 DLL 또는 EXE와 연결하여 개체의 instance 만듭니다.

동일한 컴퓨터의 클라이언트 및 서버의 경우 서버의 CLSID는 클라이언트에 필요한 모든 것입니다. 각 컴퓨터에서 COM은 시스템에 설치된 서버에 대한 모든 CLSID의 데이터베이스(Microsoft Windows 및 Macintosh 플랫폼의 시스템 레지스트리 사용)를 유지 관리합니다. 각 CLSID와 해당 CLSID에 대한 코드를 포함하는 DLL 또는 EXE의 위치 간의 매핑입니다. COM은 클라이언트가 COM 클래스의 instance 만들고 해당 서비스를 사용하려고 할 때마다 이 데이터베이스를 참조하므로 클라이언트는 컴퓨터에서 코드의 절대 위치를 알 필요가 없습니다.

분산 시스템의 경우 COM은 원격 서버가 클라이언트에서 사용하기 위해 자신을 등록할 수 있도록 하는 레지스트리 항목을 제공합니다. 애플리케이션은 서버의 CLSID만 알아야 하지만 레지스트리를 사용하여 서버를 찾을 수 있으므로 COM을 사용하면 클라이언트가 레지스트리 항목을 재정의하고 서버 위치를 지정하여 네트워크를 최대한 활용할 수 있습니다. ( 원격 개체 찾기를 참조하세요.)

클래스의 instance 만드는 기본 방법은 COM 클래스 개체를 사용하는 것입니다. 지정된 클래스의 새 인스턴스를 만드는 데 공통적인 함수를 지원하는 중간 개체일 뿐입니다. CLSID에서 개체를 만드는 데 사용되는 대부분의 클래스 개체는 중요한 CreateInstance 메서드를 포함하는 인터페이스인 IClassFactory 인터페이스를 지원합니다. 인스턴스화할 개체의 각 클래스에 대해 IClassFactory 인터페이스를 구현합니다. ( IClassFactory 구현에 대한 자세한 내용은 IClassFactory 구현을 참조하세요.)

참고

다른 사용자 지정 클래스 팩터리 인터페이스를 지원하는 서버는 IClassFactory 를 특별히 지원할 필요가 없습니다. 그러나 CoGetClassObject 이외의 활성화 함수(예: CoCreateInstanceEx)를 호출하려면 서버에서 IClassFactory를 지원해야 합니다.

 

클라이언트가 서버 개체의 instance 만들려는 경우 CoGetClassObject 호출에서 원하는 개체의 CLSID를 사용합니다. (이 호출은 개체 만들기 도우미 함수 중 하나를 통해 직접 또는 암시적일 수 있습니다.) 이 함수는 CLSID와 연결된 코드를 찾고 클래스 개체를 만들고 요청된 인터페이스에 대한 포인터를 제공합니다. (CoGetClassObject는 클라이언트의 원하는 인터페이스 포인터를 지정하는 riid 매개 변수를 사용합니다.)

참고

COM에는 다른 많은 함수가 빌드되는 몇 가지 함수만 있습니다. 이 중 가장 중요한 것은 모든 instance 만들기 함수의 기초가 되는 CoGetClassObject일 것입니다.

 

이 포인터를 사용하면 호출자가 개체의 instance 만들고 개체에서 요청된 인터페이스에 대한 포인터를 검색할 수 있습니다. 이 인터페이스는 일반적으로 초기화 인터페이스로, 클라이언트가 원하는 개체로 작업을 수행할 수 있도록 개체를 활성화(실행 중 상태로 설정)하는 데 사용됩니다. COM의 기본 함수를 사용하여 클라이언트는 모든 개체 포인터를 해제하는 데도 주의해야 합니다.

개체 인스턴스를 활성화하기 위한 또 다른 메커니즘은 클래스 모니커를 사용하는 것입니다. 클래스 모니커가 생성되는 클래스의 클래스 개체에 바인딩됩니다. 자세한 내용은 클래스 모니커를 참조하세요.

COM은 개체 인스턴스를 만드는 작업을 줄이는 몇 가지 도우미 함수를 제공합니다. 인스턴스 만들기 도우미 함수에 설명되어 있습니다.

클래스 개체를 통해 개체 만들기