Share via


개체에 대한 포인터 가져오기

COM에는 엄격한 클래스 모델이 없으므로 클라이언트가 개체의 인터페이스에 대한 포인터를 인스턴스화하거나 가져올 수 있는 네 가지 방법이 있습니다.

  • 미리 결정된 형식의 개체를 만드는 COM 라이브러리 함수를 호출합니다. 즉, 함수는 특정 개체 클래스에 대한 하나의 특정 인터페이스에 대한 포인터만 반환합니다.
  • CLSID(클래스 식별자)를 기반으로 개체를 만들고 요청된 모든 형식의 인터페이스 포인터를 반환하는 COM 라이브러리 함수를 호출합니다.
  • 다른 개체를 만들거나 기존 개체에 연결하는 일부 인터페이스의 메서드를 호출하고 해당 개별 개체에 대한 인터페이스 포인터를 반환합니다.
  • 다른 개체가 인터페이스 포인터를 클라이언트에 직접 전달하는 인터페이스를 사용하여 개체를 구현합니다.

첫 번째 인터페이스가 있는 후 개체의 다른 인터페이스에 대한 포인터를 가져오는 방법에 대한 자세한 내용은 QueryInterface: 개체에서 탐색을 참조하세요.

미리 결정된 형식의 개체 만들기

특정 인터페이스 구현에 대한 포인터를 반환하는 CoGetMalloc와 같은 수많은 COM 함수가 있습니다. (CoGetMalloc 는 표준 COM 메모리 할당자에 대한 포인터를 검색합니다.) 이러한 함수의 대부분은 도우미 함수이며, 이러한 함수의 대부분은 스토리지 또는 데이터 전송과 같은 관련 영역 아래에 있는 이 설명서의 참조 섹션에 설명되어 있습니다.

CLSID를 기반으로 개체 만들기

CLSID를 감안할 때 클라이언트가 를 호출하여 instance 개체를 만들고 포인터를 가져올 수 있는 몇 가지 함수가 있습니다. 이러한 모든 함수는 클래스 개체를 만들고 해당 클래스의 인스턴스를 만들 수 있는 인터페이스에 대한 포인터를 제공하는 CoGetClassObject 함수를 기반으로 합니다. 서버가 상주하는 시스템을 나타내는 정보가 있어야 하지만 해당 정보를 클라이언트에 포함할 필요가 없습니다. 클라이언트는 CLSID만 알고 서버 코드의 절대 경로를 알아야 합니다. 자세한 내용은 클래스 개체를 통해 개체 만들기를 참조하세요.

별도 개체에 대한 포인터 반환

별도의 개체에 대한 포인터를 반환하는 많은 인터페이스 메서드 중에는 개체가 유지 관리하는 지정된 형식의 항목 수를 확인할 수 있는 열거자 개체에 대한 포인터를 만들고 반환하는 몇 가지가 있습니다. COM은 문자열, 중요한 구조체, 모니커 및 IUnknown 인터페이스 포인터와 같은 다양한 항목을 열거하기 위한 인터페이스를 정의합니다. 열거자 instance 만들고 해당 인터페이스에 대한 포인터를 가져오는 일반적인 방법은 다른 인터페이스에서 메서드를 호출하는 것입니다. 예를 들어 IDataObject 인터페이스는 서로 다른 두 열거형 개체의 인터페이스에 대한 포인터를 반환하는 EnumDAdviseEnumFormatEtc라는 두 가지 메서드를 정의합니다. OLE 복합 문서 인터페이스 IOleObject::GetClientSite와 같이 개체에 대한 포인터를 반환하는 메서드의 COM에는 임베디드 또는 연결된 개체에서 호출할 때 컨테이너 개체의 IOleClientSite 구현에 대한 포인터를 반환하는 다른 많은 예제가 있습니다.

인터페이스 포인터를 클라이언트에 직접 전달할 개체 구현

OLE 복합 문서 컨테이너 및 서버와 같은 두 개체가 양방향 통신이 필요한 경우 각각은 인터페이스 포인터를 다른 개체에 전달할 수 있는 인터페이스 메서드를 포함하는 개체를 구현합니다. 또한 만든 개체의 클라이언트인 구현 개체는 메서드를 호출하고 전달된 포인터를 가져올 수 있습니다.

COM 클라이언트 및 서버

COM 서버 책임