CreateDispTypeInfo-Funktion (oleauto.h)
Erstellt vereinfachte Typinformationen für die Verwendung in einer Implementierung von IDispatch.
Syntax
HRESULT CreateDispTypeInfo(
INTERFACEDATA *pidata,
LCID lcid,
ITypeInfo **pptinfo
);
Parameter
pidata
Die Schnittstellenbeschreibung, die in diesen Typinformationen beschrieben wird.
lcid
Der Gebietsschemabezeichner für die Namen, die in den Typinformationen verwendet werden.
pptinfo
Zeigen Sie bei der Rückgabe auf eine Typinformationsimplementierung zur Verwendung in DispGetIDsOfNames und DispInvoke.
Rückgabewert
Diese Funktion kann einen dieser Werte zurückgeben.
Rückgabecode | Beschreibung |
---|---|
|
Die -Schnittstelle wird unterstützt. |
|
Entweder die Schnittstellenbeschreibung oder die LCID ist ungültig. |
|
Unzureichender Arbeitsspeicher, um den Vorgang abzuschließen. |
Hinweise
Sie können Typinformationen zur Laufzeit mithilfe von CreateDispTypeInfo und einer INTERFACEDATA-Struktur erstellen, die das verfügbar gemachte Objekt beschreibt.
Die von dieser Funktion zurückgegebenen Typinformationen dienen in erster Linie der Automatisierung der Implementierung von IDispatch. CreateDispTypeInfo gibt nicht alle unter Typbeschreibungsschnittstellen beschriebenen Typinformationen zurück. Das Argument pidata ist keine vollständige Beschreibung einer Schnittstelle. Es enthält keine Hilfeinformationen, Kommentare, optionale Parameter und andere Typinformationen, die in verschiedenen Kontexten nützlich sind.
Dementsprechend ist die empfohlene Methode zum Bereitstellen von Typinformationen zu einem Objekt die Beschreibung des Objekts mithilfe der Objektbeschreibungssprache (Object Description Language, ODL) und das Kompilieren der Objektbeschreibung in eine Typbibliothek mithilfe des MIDL-Compilers (Microsoft Interface Definition Language).
Um Typinformationen aus einer Typbibliothek zu verwenden, verwenden Sie die Funktionen LoadTypeLib und GetTypeInfoOfGuid anstelle von CreateDispTypeInfo. Weitere Informationen zu Typbeschreibungsschnittstellen.
Beispiele
Der folgende Code erstellt Typinformationen aus INTERFACEDATA, um das CCalc-Objekt verfügbar zu machen.
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;
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | oleauto.h |
Bibliothek | OleAut32.lib |
DLL | OleAut32.dll |