다음을 통해 공유


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

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

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

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

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

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

CLSID를 기반으로 개체 만들기

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

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

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

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

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

COM 클라이언트 및 서버

COM 서버에 대한 책임