共用方式為


CreateStdDispatch 函式 (oleauto.h)

透過單一函數調用建立 IDispatch 介面的標準實作。 這可簡化透過自動化公開物件。

語法

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

參數

punkOuter

物件的 IUnknown 實作。

pvThis

要公開的物件。

ptinfo

描述已公開物件的型別資訊。

ppunkStdDisp

實作 IDispatch 介面 QueryInterface 呼叫之物件的私用未知。 如果函式失敗,則此指標為 null。

傳回值

此函式可以傳回下列其中一個值。

傳回碼 Description
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
程式庫 OleAut32.lib
Dll OleAut32.dll

另請參閱

建立分派 API 函式

IDispatch