createStdDispatch 函数 (oleauto.h)

通过单个函数调用创建 IDispatch 接口的标准实现。 这简化了通过自动化公开对象。

语法

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

参数

punkOuter

对象的 IUnknown 实现。

pvThis

要公开的对象。

ptinfo

描述公开对象的类型信息。

ppunkStdDisp

实现 IDispatch 接口 QueryInterface 调用的 对象的私有未知。 如果函数失败,则此指针为 null。

返回值

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

返回代码 说明
S_OK
成功。
E_INVALIDARG
前三个参数之一无效。
E_OUTOFMEMORY
内存不足,无法完成操作。

注解

创建对象时,可以使用 CreateStdDispatch ,而不是为对象实现 IDispatch 成员函数。 但是, CreateStdDispatch 创建的实现具有以下限制:

  • 仅支持一种国家/地区语言。
  • 仅支持从 Invoke 返回的调度定义的异常代码。

LoadTypeLibGetTypeInfoOfGuidCreateStdDispatch 构成了使用类型库公开对象时需要调用的最小函数集。 有关 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
Library OleAut32.lib
DLL OleAut32.dll

另请参阅

创建 Dispatch API 函数

IDispatch