Função CreateDispTypeInfo (oleauto.h)
Cria informações de tipo simplificadas para uso em uma implementação de IDispatch.
Sintaxe
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
Parâmetros
pidata
A descrição da interface que essas informações de tipo descrevem.
lcid
O identificador de localidade para os nomes usados nas informações de tipo.
pptinfo
No retorno, ponteiro para uma implementação de informações de tipo para uso em DispGetIDsOfNames e DispInvoke.
Retornar valor
Essa função pode retornar um desses valores.
Código de retorno | Descrição |
---|---|
|
Há suporte para a interface . |
|
A descrição da interface ou a LCID não é válida. |
|
Memória insuficiente para concluir a operação. |
Comentários
Você pode construir informações de tipo em tempo de execução usando CreateDispTypeInfo e uma estrutura INTERFACEDATA que descreve o objeto que está sendo exposto.
As informações de tipo retornadas por essa função foram projetadas principalmente para automatizar a implementação de IDispatch. CreateDispTypeInfo não retorna todas as informações de tipo descritas em Interfaces de Descrição de Tipo. O argumento pidata não é uma descrição completa de uma interface. Ele não inclui informações de Ajuda, comentários, parâmetros opcionais e outras informações de tipo que são úteis em contextos diferentes.
Assim, o método recomendado para fornecer informações de tipo sobre um objeto é descrever o objeto usando a Linguagem de Descrição do Objeto (ODL) e compilar a descrição do objeto em uma biblioteca de tipos usando o compilador MIDL (Linguagem de Definição de Interface da Microsoft).
Para usar informações de tipo de uma biblioteca de tipos, use as funções LoadTypeLib e GetTypeInfoOfGuid em vez de CreateDispTypeInfo. Para obter mais informações , digite interfaces de descrição.
Exemplos
O código a seguir cria informações de tipo de INTERFACEDATA para expor o objeto 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;
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | oleauto.h |
Biblioteca | OleAut32.lib |
DLL | OleAut32.dll |