createDispTypeInfo 函数 (oleauto.h)
创建用于 IDispatch 实现的简化类型信息。
语法
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
参数
pidata
此类型信息描述的接口说明。
lcid
类型信息中使用的名称的区域设置标识符。
pptinfo
返回时,指针指向用于 DispGetIDsOfNames 和 DispInvoke 的类型信息实现。
返回值
此函数可以返回其中一个值。
返回代码 | 说明 |
---|---|
|
支持 接口。 |
|
接口说明或 LCID 无效。 |
|
内存不足,无法完成操作。 |
注解
可以使用 CreateDispTypeInfo 和描述所公开对象的 INTERFACEDATA 结构在运行时构造类型信息。
此函数返回的类型信息主要用于自动实现 IDispatch。 CreateDispTypeInfo 不返回类型 说明接口中描述的所有类型信息。 参数 pidata 不是接口的完整说明。 它不包括在不同上下文中有用的帮助信息、注释、可选参数和其他类型信息。
因此,提供对象类型信息的建议方法是使用对象描述语言 (ODL) 描述对象,并使用 Microsoft 接口定义语言 (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 |
Library | OleAut32.lib |
DLL | OleAut32.dll |