CreateStdDispatch 함수(oleauto.h)

단일 함수 호출을 통해 IDispatch 인터페이스의 표준 구현을 만듭니다. 이렇게 하면 Automation을 통해 개체를 쉽게 노출할 수 있습니다.

구문

HRESULT CreateStdDispatch(
  IUnknown  *punkOuter,
  void      *pvThis,
  ITypeInfo *ptinfo,
  IUnknown  **ppunkStdDisp
);

매개 변수

punkOuter

개체의 IUnknown 구현입니다.

pvThis

노출할 개체입니다.

ptinfo

노출된 개체를 설명하는 형식 정보입니다.

ppunkStdDisp

IDispatch 인터페이스 QueryInterface 호출을 구현하는 개체에 대해 알 수 없는 프라이빗입니다. 함수가 실패하면 이 포인터는 null입니다.

반환 값

이 함수는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
S_ok
성공.
E_INVALIDARG
처음 세 인수 중 하나가 잘못되었습니다.
E_OUTOFMEMORY
작업을 완료할 메모리가 부족했습니다.

설명

개체에 대한 IDispatch 멤버 함수를 구현하는 대신 개체를 만들 때 CreateStdDispatch를 사용할 수 있습니다. 그러나 CreateStdDispatch 가 만드는 구현에는 다음과 같은 제한 사항이 있습니다.

  • 하나의 국가 언어만 지원합니다.
  • Invoke에서 반환된 디스패치 정의 예외 코드만 지원합니다.

LoadTypeLib, GetTypeInfoOfGuidCreateStdDispatch 는 형식 라이브러리를 사용하여 개체를 노출하기 위해 호출해야 하는 최소 함수 집합으로 구성됩니다. LoadTypeLibGetTypeInfoOfGuid에 대한 자세한 내용은 형식 설명 인터페이스를 참조하세요.

CreateDispTypeInfoCreateStdDispatch 는 INTERFACEDATA 구조에서 제공하는 형식 정보를 사용하여 개체를 노출하기 위해 호출해야 하는 최소 디스패치 구성 요소 집합으로 구성됩니다.

예제

다음 코드는 CreateStdDispatch를 사용하여 CCalc 클래스에 대한 IDispatch 인터페이스를 구현합니다.

CCalc FAR*
CCalc::Create()
{
   HRESULT hresult;
   CCalc * pcalc;
   CArith * parith;
   ITypeInfo* ptinfo;
   IUnknown * punkStdDisp;
extern INTERFACEDATA NEARDATA g_idataCCalc;

   if((pcalc = new FAR CCalc()) == NULL)
      return NULL;
   pcalc->AddRef();

   parith = &(pcalc->m_arith);

   // Build type information for the functionality on this object that
   // is being exposed for external programmability.
   hresult = CreateDispTypeInfo(
      &g_idataCCalc, LOCALE_SYSTEM_DEFAULT, &ptinfo);
   if(hresult != NOERROR)
      goto LError0;

   // Create an aggregate with an instance of the default
   // implementation of IDispatch that is initialized with
   // type information.
   hresult = CreateStdDispatch(
      pcalc,            // Controlling unknown.
      parith,            // Instance to dispatch on.
      ptinfo,            // Type information describing the instance.
      &punkStdDisp);

   ptinfo-&>Release();

   if(hresult != NOERROR)
      goto LError0;

   pcalc->m_punkStdDisp = punkStdDisp;

   return pcalc;

LError0:;
   pcalc->Release();
   return NULL;
}

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 oleauto.h
라이브러리 OleAut32.lib
DLL OleAut32.dll

추가 정보

Dispatch API 함수 만들기

IDispatch