CreateDispTypeInfo 函式 (oleauto.h)
建立簡化的類型資訊,以用於 IDispatch 的實作。
語法
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
參數
pidata
此類型資訊所描述的介面描述。
lcid
類型資訊中所用名稱的地區設定標識碼。
pptinfo
傳回時,用於 DispGetIDsOfNames 和 DispInvoke 的類型資訊實作指標。
傳回值
此函式可以傳回下列其中一個值。
傳回碼 | Description |
---|---|
|
支援介面。 |
|
介面描述或 LCID 無效。 |
|
記憶體不足,無法完成作業。 |
備註
您可以使用 CreateDispTypeInfo 和描述所公開物件的 INTERFACEDATA 結構,在運行時間建構類型資訊。
此函式所傳回的類型資訊主要是設計來自動化 IDispatch的實作。 CreateDispTypeInfo 不會傳回 類型描述介面中所述的所有類型資訊。 自變數 pidata 不是介面的完整描述。 不包含說明資訊、批注、選擇性參數,以及不同內容中有用的其他類型資訊。
因此,提供物件類型信息的建議方法是使用物件描述語言 (ODL) 來描述物件,並使用 Microsoft Interface Definition Language (MIDL) 編譯程式,將物件描述編譯成類型連結庫。
若要從類型庫使用類型資訊,請使用 LoadTypeLib 和 GetTypeInfoOfGuid 函式,而不是 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 |