createDispTypeInfo 函数 (oleauto.h)

创建用于 IDispatch 实现的简化类型信息。

语法

HRESULT CreateDispTypeInfo(
  INTERFACEDATA *pidata,
  LCID          lcid,
  ITypeInfo     **pptinfo
);

参数

pidata

此类型信息描述的接口说明。

lcid

类型信息中使用的名称的区域设置标识符。

pptinfo

返回时,指针指向用于 DispGetIDsOfNamesDispInvoke 的类型信息实现。

返回值

此函数可以返回其中一个值。

返回代码 说明
S_OK
支持 接口。
E_INVALIDARG
接口说明或 LCID 无效。
E_OUTOFMEMORY
内存不足,无法完成操作。

注解

可以使用 CreateDispTypeInfo 和描述所公开对象的 INTERFACEDATA 结构在运行时构造类型信息。

此函数返回的类型信息主要用于自动实现 IDispatchCreateDispTypeInfo 不返回类型 说明接口中描述的所有类型信息。 参数 pidata 不是接口的完整说明。 它不包括在不同上下文中有用的帮助信息、注释、可选参数和其他类型信息。

因此,提供对象类型信息的建议方法是使用对象描述语言 (ODL) 描述对象,并使用 Microsoft 接口定义语言 (MIDL) 编译器将对象说明编译到类型库中。

若要使用类型库中的类型信息,请使用 LoadTypeLibGetTypeInfoOfGuid 函数,而不是 CreateDispTypeInfo。 有关详细信息 ,请键入说明接口

示例

下面的代码从 INTERFACEDATA 创建类型信息以公开 CCalc 对象。

static METHODDATA NEARDATA rgmdataCCalc[] =
{
      PROPERTY(VALUE,  IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4),
      PROPERTY(ACCUM,  IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4),
      PROPERTY(OPND,   IMETH_OPERAND,  IDMEMBER_OPERAND,  VT_I4),
      PROPERTY(OP,     IMETH_OPERATOR, IDMEMBER_OPERATOR, VT_I2),
      METHOD0(EVAL,    IMETH_EVAL,     IDMEMBER_EVAL,     VT_BOOL),
      METHOD0(CLEAR,   IMETH_CLEAR,    IDMEMBER_CLEAR,    VT_EMPTY),
      METHOD0(DISPLAY, IMETH_DISPLAY,  IDMEMBER_DISPLAY,  VT_EMPTY),
      METHOD0(QUIT,    IMETH_QUIT,     IDMEMBER_QUIT,     VT_EMPTY),
      METHOD1(BUTTON,  IMETH_BUTTON,   IDMEMBER_BUTTON,   VT_BOOL),
};

INTERFACEDATA NEARDATA g_idataCCalc =
{
   rgmdataCCalc, DIM(rgmdataCCalc)
};

// Use Dispatch interface API functions to implement IDispatch.
CCalc *
CCalc::Create()
{
   HRESULT hresult;
   CCalc * pcalc;
   CArith * parith;
   ITypeInfo * ptinfo;
   IUnknown * punkStdDisp;
   extern INTERFACEDATA NEARDATA g_idataCCalc;

   if((pcalc = new 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
Library OleAut32.lib
DLL OleAut32.dll

另请参阅

创建调度 API 函数

IDispatch