Share via


CreateDispTypeInfo 函式 (oleauto.h)

建立簡化的類型資訊,以用於 IDispatch 的實作。

語法

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

參數

pidata

此類型資訊所描述的介面描述。

lcid

類型資訊中所用名稱的地區設定標識碼。

pptinfo

傳回時,用於 DispGetIDsOfNamesDispInvoke 的類型資訊實作指標。

傳回值

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

傳回碼 Description
S_OK
支援介面。
E_INVALIDARG
介面描述或 LCID 無效。
E_OUTOFMEMORY
記憶體不足,無法完成作業。

備註

您可以使用 CreateDispTypeInfo 和描述所公開物件的 INTERFACEDATA 結構,在運行時間建構類型資訊。

此函式所傳回的類型資訊主要是設計來自動化 IDispatch的實作。 CreateDispTypeInfo 不會傳回 類型描述介面中所述的所有類型資訊。 自變數 pidata 不是介面的完整描述。 不包含說明資訊、批注、選擇性參數,以及不同內容中有用的其他類型資訊。

因此,提供物件類型信息的建議方法是使用物件描述語言 (ODL) 來描述物件,並使用 Microsoft Interface Definition Language (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
程式庫 OleAut32.lib
Dll OleAut32.dll

另請參閱

建立分派 API 函式

IDispatch