Funzione CreateDispTypeInfo (oleauto.h)
Crea informazioni sui tipi semplificate da usare in un'implementazione di IDispatch.
Sintassi
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
Parametri
pidata
Descrizione dell'interfaccia descritta da queste informazioni sul tipo.
lcid
Identificatore delle impostazioni locali per i nomi utilizzati nelle informazioni sul tipo.
pptinfo
In caso di restituzione, puntatore a un'implementazione delle informazioni sul tipo da usare in DispGetIDsOfNames e DispInvoke.
Valore restituito
Questa funzione può restituire uno di questi valori.
Codice restituito | Descrizione |
---|---|
|
L'interfaccia è supportata. |
|
La descrizione dell'interfaccia o LCID non è valida. |
|
Memoria insufficiente per completare l'operazione. |
Commenti
È possibile costruire informazioni sul tipo in fase di esecuzione usando CreateDispTypeInfo e una struttura INTERFACEDATA che descrive l'oggetto esposto.
Le informazioni sul tipo restituite da questa funzione sono progettate principalmente per automatizzare l'implementazione di IDispatch. CreateDispTypeInfo non restituisce tutte le informazioni sul tipo descritte in Interfacce di descrizione del tipo. L'argomento pidata non è una descrizione completa di un'interfaccia. Non include informazioni sulla Guida, commenti, parametri facoltativi e altre informazioni sul tipo utili in contesti diversi.
Di conseguenza, il metodo consigliato per fornire informazioni sul tipo su un oggetto consiste nel descrivere l'oggetto utilizzando il linguaggio ODL (Object Description Language) e compilare la descrizione dell'oggetto in una libreria dei tipi usando il compilatore MIDL (Microsoft Interface Definition Language).
Per usare le informazioni sui tipi di una libreria dei tipi, usare le funzioni LoadTypeLib e GetTypeInfoOfGuid anziché CreateDispTypeInfo. Per altre informazioni, vedere Interfacce di descrizione del tipo.
Esempio
Il codice che segue crea informazioni sul tipo da INTERFACEDATA per esporre l'oggetto 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;
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | oleauto.h |
Libreria | OleAut32.lib |
DLL | OleAut32.dll |