아이디스패치

IDispatch

IDispatch는 OLE Automation [1]프로토콜을 노출하는 인터페이스입니다.IUnknown 확장으로 COM 객체에 의해 노출될 수 있는 표준 인터페이스 중 하나입니다.COM은 VTABLE 기반의 IUnnnknown 인터페이스인 커스텀, Introspection을 지원하는 IDispatch 인터페이스인 디스패치 두 가지 유형을 모두 지원하는 듀얼인터페이스의 3가지 인터페이스 유형을 구분합니다.

자동화(IDISPatch) 인터페이스를 통해 클라이언트 애플리케이션은 런타임에 객체가 지원하는 속성 및 메서드를 검색할 수 있습니다. 즉, RTI 개념을 구현합니다.또한 이러한 속성 및 메서드를 호출하는 데 필요한 정보도 제공합니다.클라이언트 응용 프로그램은 컴파일할 때 개체 구성원을 인식할 필요가 없습니다.이것에 의해, IIS 나 IE 의 작성시에 호출 규약을 알 수 없었던 Internet ExplorerASP 서버나 JavaScript등의 스크립트 프로그램 플랫폼에 의해서 COM 및 ActiveX 오브젝트를 호출할 수 있습니다.반면 단순한 오브젝트 라이브러리는 컴파일되어 프로그램으로 링크됩니다.예를 들어 DLL 호출은 컴파일 시에 함수명과 파라미터를 알아야 합니다.

스크립트 라이터는 COM 오브젝트에 매뉴얼에서 이미 알고 있는 메서드 또는 속성을 요구할 수 있습니다.그런 다음 클라이언트는 IDispatch 인터페이스에서 제공하는 invoke를 사용하여 함수를 실행할 수 있습니다.이것은 레이트바인딩의 일종입니다.이러한 기능은 DDE(Dynamic Data Exchange)에서도 지원되었습니다.DDE는 레벨이 너무 낮기 때문에 널리 보급되지 않았습니다.

디스패치 인터페이스는 유연하지만 커스텀인터페이스에 [2]비해 인스펙션과 호출 오버헤드가 증가합니다.따라서 대부분의 경우 듀얼 인터페이스를 사용하여 두 인터페이스 유형을 모두 지원하는 것이 좋습니다.이렇게 하면 VTABLE 기반 호출을 지원하는 클라이언트는 디스패치 대응 인터페이스 대신 커스텀인터페이스를 사용할 수 있습니다.

방법들

IDispatch 인터페이스를 지원하는 오브젝트에 의해 구현되는 각 속성 및 메서드에는 Dispatch ID(대부분 DISPID)라고 불리는 것이 있습니다.DISPID는 속성 또는 메서드를 식별하는 주요 수단이며 매개 변수를 포함하는 Variant 배열과 함께 호출되는 속성 또는 메서드에 대해 Invoke 함수에 제공해야 합니다.IDsOfNames 함수를 사용하여 문자열 형식의 속성 또는 메서드 이름에서 적절한 DISPID를 가져올 수 있습니다.

IDispatch는 IUnknown에서 파생되어 다음 4가지 방법으로 확장됩니다.

인터페이스 아이디스패치 : 일반의 알 수 없다 {   가상 결과 GetTypeInfoCount(서명되어 있지 않다 인트 * pctinfo) = 0;   가상 결과 GetTypeInfo(서명되어 있지 않다 인트 iTInfo,                               LCID 액정,                               IType Info ** ppTInfo                              ) = 0;   가상 결과 GetIDsOfNames(참조 리이드,                                 올레차 ** rgsz 이름,                                 서명되어 있지 않다 인트 cNames(이름),                                 LCID 액정,                                 디스피드 * rgDispId                                ) = 0;   가상 결과 호출하다(디스피드 dispId 멤버,                          참조 리이드,                          LCID 액정,                          단어 플래그가 붙어 있다,                          디스패러햄 * pDispParams,                          변종 * pVar Result(pVar Result),                          엑셀핀포 * pExcepInfo,                          서명되어 있지 않다 인트 * puArgErr                         ) = 0; }; 

IDispatch 인터페이스 ID는 값이 {00020400-0000-0000-C000-00000046}인 GUID로 정의됩니다.

레퍼런스

  1. ^ Microsoft MSDN: IDispatch 인터페이스
  2. ^ Microsoft MSDN: ActiveX/COM Q&A 1995년 12월

외부 링크

  • DispHelper는 C 또는 C++로부터의 IDispatch 사용을 지원하는 오픈 소스 라이브러리입니다.
  • IDispatch Code Generator, 코드 제너레이터.개체에 IDispatch를 추가하는 기능입니다.언어는 C++입니다.