Skip to main content
Komponentenautomatisierung
CreateDispTypeInfo

Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]

Vereinfachte Typinformationen für die Verwendung erstellt in einer Implementierung von IDispatch.

HRESULT CreateDispTypeInfo(  
  INTERFACEDATA  pidata,        
  LCID  lcid,                   
  ITypeInfo FAR* FAR*  pptinfo  
);
pidata

Die Schnittstellenbeschreibung, die diesem Typ beschreibt.

LCID

Der Gebietsschemabezeichner für die Namen in die Typinformationen verwendet.

pptinfo

Für return, Zeiger auf eine Art Informationen Implementierung für die Verwendung in DispGetIDsOfNames und DispInvoke.

Der Rückgabewert vom zurückgegebenen HRESULT ist eine der folgenden:

Rückgabewert

Bedeutung

S_OK

Die Schnittstelle wird unterstützt.

E_INVALIDARG

Die Schnittstellenbeschreibung oder die LCID ist ungültig.

E_OUTOFMEMORY

Unzureichender Arbeitsspeicher oder nicht genügend Speicherplatz.

Sie können die Typinformationen zur Laufzeit erstellen, mithilfe von CreateDispTypeInfo und ein INTERFACEDATA-Struktur, die das Objekt verfügbar gemacht werden beschreibt.

Die Typinformationen von dieser Funktion zurückgegebene dient in erster Linie die Implementierung von IDispatch automatisieren. CreateDispTypeInfo zurück keine aller in Typ Beschreibung Schnittstellen beschriebenen Typinformationen. Das Argument Pidata ist keine vollständige Beschreibung einer Schnittstelle. Es schließt nicht Hilfe Informationen, Kommentare, optionale Parameter und anderer Typinformationen, die in verschiedenen Kontexten nützlich ist.

Dementsprechend ist die empfohlene Methode zum Bereitstellen der Typinformationen über ein Objekt beschreiben Sie das Objekt mit ODL (Object Description Language) und der Objektbeschreibung in einen Typ Bibliothek mit Microsoft Interface Definition Language (MIDL) Compiler kompilieren.

Typinformationen aus einen Typ Bibliothek verwenden möchten, verwenden Sie die LoadTypeLibGetTypeInfoOfGuid Funktionen und anstelle von CreateDispTypeInfo. Für Weitere Informationen Typ Beschreibung Schnittstellen.

Der Code, der folgt erstellt Typinformationen von INTERFACEDATA CCalc-Objekt verfügbar gemacht.

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 FAR*
CCalc::Create()
{
   HRESULT hresult;
   CCalc FAR* pcalc;
   CArith FAR* parith;
   ITypeInfo FAR* ptinfo;
   IUnknown FAR* punkStdDisp;
extern INTERFACEDATA NEARDATA g_idataCCalc;

   if((pcalc = new FAR 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;
}