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
S_OK
Die -Schnittstelle wird unterstützt.
E_INVALIDARG
Entweder die Schnittstellenbeschreibung oder die LCID ist ungültig.
E_OUTOFMEMORY
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

Weitere Informationen

Erstellen von Dispatch-API-Funktionen

IDispatch