간단히 말해 COM (Component Object Model)이란 무엇입니까? [닫은]


89

COM 객체는 OS에 의해 관리되는 일반적인 사용 객체 인 것 같습니다. 개체는 엄격한 인터페이스를 따르며 개체를 쿼리하여 정보를 확인할 수 있습니다. 이것이 COM 개체입니까?

c++  com 

답변:


111

COM 은 구성 요소를 구현 한 프로그래머와이를 사용하는 프로그래머가 사용하는 언어에 관계없이, 그리고 구성 요소가 클라이언트의 프로그램에서 구현되었는지 여부와 관계없이 개체 (또는 구성 요소)의 재사용을 허용하는 메커니즘입니다. 컴퓨터 (또는 네트워크)의 다른 위치.

일반적으로 각 COM 구성 요소는 하나 이상의 인터페이스 구현을 제공합니다. 이러한 인터페이스는 IDL (Interface Definition Language)을 사용하여 언어 중립적 인 방식으로 정의 됩니다. 예를 들어 COM의 기본 인터페이스 중 하나 인 IUnknown 은 다음과 같이 정의됩니다.

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};

이 작은 인터페이스는 각 COM 구성 요소 가이를 구현 해야 하기 때문에 COM의 기본입니다 . COM 기계의 두 가지 중요한 측면을 정의합니다.

  • QueryInterface호출 코드가 알려진 인터페이스에 대한 구현을 얻을 수 있습니다. COM에서 인터페이스는 GUID (Interface Identifier, IID라고도 함)에 의해 참조됩니다. 객체가 여러 인터페이스를 구현하는 경우 클라이언트 코드가 각 인터페이스에 대한 참조를 얻는 방법입니다. 원하는 경우 일종의 캐스팅 연산자 역할을합니다.
  • AddRef()Release()COM 개체에 대한 메모리 관리 메커니즘을 구현합니다. 이름에서 알 수 있듯이 가장 일반적인 모델은 마지막 클라이언트가 참조를 해제 한 후 인스턴스가 파괴되는 참조 계산 메커니즘입니다.

모든 COM 구성 요소는 설치시 시스템에 등록됩니다. 프로그래머가 특정 구성 요소를 사용하려면 다음을 수행해야합니다.

  • 구성 요소가 접근 가능한 위치에 설치되었는지 확인하십시오. 대부분의 경우 실행중인 응용 프로그램의 시스템에 있지만 COM +를 사용하면 구성 요소가 원격 컴퓨터에 존재할 수도 있습니다.
  • 주어진 구성 요소의 GUID를 알아야합니다. 이 GUID를 사용하여 클라이언트는 시스템에 구성 요소를 인스턴스화하도록 요청할 수 있습니다 (C에서는이를 수행하는 함수를라고 함 CoCreateInstance()). 레지스트리에서 찾을 수 있습니다 HKEY_CLASSES_ROOT\CLSID. 각 GUID는 COM 구성 요소 또는 인터페이스에 대한 식별자 (대부분)가 있으며 해당 키 아래의 항목은 시스템에 인스턴스화 방법을 알려줍니다.

COM 기계는 매우 복잡합니다. 예를 들어 C에서 COM 구성 요소를 구현하거나 사용하려면 엄청난 양의 작업이 필요하지만 Visual Basic과 같은 고급 언어는 COM 구성 요소의 구현과 사용을 쉽게하기 위해 많은 작업을 수행했습니다. 그러나 이점은 매우 현실적입니다. 예를 들어 Visual Basic으로 응용 프로그램을 작성할 수 있지만 VB 코드에서 직접 사용할 수있는 COM 개체로 C 또는 C ++에서 성능에 중요한 알고리즘을 구현할 수 있습니다. 시스템은 마샬링 메서드 호출 인수를 처리하고 필요에 따라 스레드, 프로세스 및 네트워크 연결을 통해 전달하여 클라이언트 코드가 일반 개체를 사용하는 느낌을 갖도록합니다.

Windows의 많은 기본 부분은 COM을 기반으로합니다. 예를 들어 Windows 탐색기 (파일 관리자)는 기본적으로 빈 셸입니다. 트리 계층을 탐색하고 표시하기위한 일련의 COM 인터페이스를 정의하며 실제로 "내 컴퓨터", 드라이브, 폴더 및 파일을 표시하는 모든 코드는 이러한 인터페이스를 구현하는 COM 구성 요소 집합입니다.

.NET의 출현으로 COM은 서서히 구식이되고 있습니다.


10
마지막 줄의 출처?
Shad

32

COM은 호출자가 다른 공급 업체의 C ++ 컴파일러 또는 (궁극적으로) 다른 언어를 사용하는 경우에도 재사용 할 수있는 바이너리를 배포 할 수 있도록 개발 된 메커니즘입니다.

COM에 대한 좋은 소개를 원한다면 Don Box의 Essential COM 을 읽어보십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.