VARIANT und VARIANTARG

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

Verwenden Sie VARIANTARG, um in DISPPARAMS und VARIANT Variante-Daten an, die als Verweis übergeben werden kann nicht übergebenen Argumente zu beschreiben. Wenn eine Variante verweist auf eine andere Variante mithilfe der VT_VARIANT | VT_BYREF Variablentyp die Variante, verwiesen wird kann nicht vom Typ VT_VARIANT auch sein | VT_BYREF. Varianten können als Wert übergeben werden, selbst wenn VARIANTARGs nicht. Die folgende Definition VARIANT ist in OAIDL.H Automatisierung Headerdatei beschrieben:

struct tagVARIANT
{
  union 
    {
    struct __tagVARIANT
       {
       VARTYPE vt;
       WORD wReserved1;
       WORD wReserved2;
       WORD wReserved3;
       union
          {
           LONGLONG            llval;           // VT_I8
           LONG                lVal;            // VT_I4
           BYTE                bVal;            // VT_UI1
           SHORT               iVal;            // VT_I2
           FLOAT               fltVal;          // VT_R4
           DOUBLE              dblVal;          // VT_R8
           VARIANT_BOOL        boolVal;         // VT_BOOL
           _VARIANT_BOOL       bool;
           SCODE               scode;           // VT_ERROR
           CY                  cyVal;           // VT_CY
           DATE                date;            // VT_DATE
           BSTR                bstrVal;         // VT_BSTR
           IUnknown            * punkVal;       // VT_UNKNOWN
           IDispatch           * pdispVal;      // VT_DISPATCH
           SAFEARRAY           * parray;        // VT_ARRAY|*
           BYTE                * pbVal;         // VT_BYREF|VT_UI1
           SHORT               * piVal;         // VT_BYREF|VT_I2
           LONG                * plVal;         // VT_BYREF|VT_I4
           LONGLONG            * pllVal;        // VT_BYREF|VT_I8
           FLOAT               * pfltVal;       // VT_BYREF|VT_R4
           DOUBLE              * pdblVal;       // VT_BYREF|VT_R8
           VARIANT_BOOL        * pboolVal;      // VT_BYREF|VT_BOOL
           _VARIANT_BOOL       * pbool;
           SCODE               * pscode;        // VT_BYREF|VT_ERROR
           CY                  * pcyVal;        // VT_BYREF|VT_CY
           DATE                * pdate;         // VT_BYREF|VT_DATE
           BSTR                * pbstrVal;      // VT_BYREF|VT_BSTR
           IUnknown            ** ppunkVal;     // VT_BYREF|VT_UNKNOWN
           IDispatch           ** ppdispVal;    // VT_BYREF|VT_DISPATCH
           SAFEARRAY           ** pparray;      // VT_BYREF|VT_ARRAY
           VARIANT             * pvarVal;       // VT_BYREF|VT_VARIANT
           PVOID               * byref;         // Generic ByRef
           CHAR                cVal;            // VT_I1
           USHORT              uiVal;           // VT_UI2
           ULONG               ulVal;           // VT_UI4
           ULONGLONG           ullVal;          // VT_UI8
           INT                 intVal;          // VT_INT
           UINT                uintVal;         // VT_UINT
           DECIMAL             * pdecVal;       // VT_BYREF|VT_DECIMAL
           CHAR                * pcVal;         // VT_BYREF|VT_I1
           USHORT              * puiVal;        // VT_BYREF|VT_UI2
           ULONG               * pulVal;        // VT_BYREF|VT_UI4
           ULONGLONG           * pullVal;       // VT_BYREF|VT_UI8
           INT                 * pintVal;       // VT_BYREF|VT_INT
           UINT                * puintVal;      // VT_BYREF|VT_UINT
           struct __tagBRECORD
               {
               PVOID                   pvRecord;
               IRecordInfo             *pRecInfo;
               }    __VARIANT_NAME_4;
           }    __VARIANT_NAME_3;
       }    __VARIANT_NAME_2;
       DECIMAL decVal;
    }   __VARIANT_NAME_1;
};

Extrahieren von Werten aus der VARIANTARGs vereinfachen, bietet Automatisierung eine Reihe von Funktionen zum Bearbeiten dieses Typs (siehe Konvertierung und Bearbeitung Funktionen (Component-Automatisierung) und Formatierung Routinen (Component-Automatisierung)). Verwendung dieser Funktionen wird dringend empfohlen, um sicherzustellen, dass Anwendungen konsistent Umwandlung Regeln angewendet werden.

vt Wert steuert die Interpretation der Union wie folgt:

Wert

Beschreibung

VT_EMPTY

Kein Wert es wurde angegeben. Wenn optionales Argument für eine Automatisierungsmethode leer ist, übergeben Sie ein VARIANT vom Typ VT_EMPTY an. Übergeben Sie stattdessen ein VARIANT vom Typ VT_ERROR mit dem Wert DISP_E_PARAMNOTFOUND.

VT_EMPTY | VT_BYREF

Nicht gültig.

VT_UI1

Ein nicht signierter 1-Byte-Zeichen wird in bVal gespeichert.

VT_UI1 | VT_BYREF

Ein Verweis auf ein nicht signierter 1-Byte-Zeichen wurde übergeben. Ein Zeiger auf den Wert ist im PbVal.

VT_UI2

Ein 2-Byte-Ganzzahl ohne Vorzeichen-Wert wird im UiVal gespeichert.

VT_UI2 | VT_BYREF

Ein Verweis auf vorzeichenlose 2-Byte-Ganzzahl wurde übergeben. Ein Zeiger auf den Wert ist im PuiVal.

VT_UI4

Eine 4-Byte-Ganzzahl ohne Vorzeichen-Wert wird im UlVal gespeichert.

VT_UI4 | VT_BYREF

Ein Verweis auf vorzeichenlose 4-Byte-Ganzzahl wurde übergeben. Ein Zeiger auf den Wert ist im PulVal.

VT_UI8

Eine 8-Byte-Ganzzahl ohne Vorzeichen-Wert wird im UllVal gespeichert.

VT_UI8 ist nicht verfügbar in Windows Millennium Edition und früheren Versionen oder Windows 2000 und früheren Versionen.

VT_UI8 | VT_BYREF

Ein Verweis auf vorzeichenlose 8-Byte-Ganzzahl wurde übergeben. Ein Zeiger auf den Wert ist im PullVal.

VT_UINT

Ein Ganzzahlwert ohne Vorzeichen wird im UintVal gespeichert.

VT_UINT | VT_BYREF

Ein Verweis auf ein Ganzzahlwert ohne Vorzeichen wurde übergeben. Ein Zeiger auf den Wert ist im PuintVal.

VT_INT

Ein ganzzahliger Wert wird in IntVal gespeichert.

VT_INT | VT_BYREF

Ein Verweis auf einen ganzzahligen Wert wurde übergeben. Ein Zeiger auf den Wert ist im PintVal.

VT_I1

1-Byte-Zeichensatz der Wert wird im cVal gespeichert.

VT_I1 | VT_BYREF

Ein Verweis auf ein 1-Byte-Zeichen wurde übergeben. Ein Zeiger der Wert ist im PcVal.

VT_I2

Ein 2-Byte-Ganzzahl-Wert wird im iVal gespeichert.

VT_I2 | VT_BYREF

Ein Verweis auf eine 2-Byte-Ganzzahl wurde übergeben. Ein Zeiger auf den Wert ist im PiVal.

VT_I4

Ein 4-Byte-Ganzzahl-Wert wird im lVal gespeichert.

VT_I4 | VT_BYREF

Ein Verweis auf eine 4-Byte-Ganzzahl wurde übergeben. Ein Zeiger auf den Wert ist im PlVal.

VT_I8

Ein 8-Byte-Ganzzahl-Wert wird im LlVal gespeichert.

VT_I8 ist nicht verfügbar in Windows Millennium Edition und früheren Versionen oder Windows 2000 und früheren Versionen.

VT_I8 | VT_BYREF

Ein Verweis auf eine 8-Byte-Ganzzahl wurde übergeben. Ein Zeiger auf den Wert ist im PllVal.

VT_R4

Ein realer IEEE 4-Byte-Wert wird in FltVal gespeichert.

VT_R4 | VT_BYREF

Ein Verweis auf einen echten IEEE 4-Byte-Wert übergeben wurde. Ein Zeiger auf den Wert ist im PfltVal.

VT_R8

Ein 8-Byte IEEE realer-Wert wird in DblVal gespeichert.

VT_R8 | VT_BYREF

Ein Verweis auf eine 8-Byte IEEE realen Wert wurde übergeben. Ein Zeiger auf den Wert ist im PdblVal.

VT_CY

Ein Währungswert wurde angegeben. Eine Währung Zahl wird als 64-Bit (8 Byte) der zwei Ergänzung Ganzzahl, multipliziert mit 10.000, um eine Festkommazahl mit 15 Stellen links vom Dezimalzeichen und 4 Stellen rechts geben gespeichert. Der Wert ist im CyVal.

VT_CY | VT_BYREF

Ein Verweis auf einen Währungswert wurde übergeben. Ein Zeiger auf den Wert ist im PcyVal.

VT_BSTR

Eine Zeichenfolge wurde übergeben;Es wird im BstrVal gespeichert. Dieser Zeiger muss abgerufen und freigegeben, indem die BSTR-Funktionen, die in konvertieren und Bearbeiten von Funktionen https://msdn.microsoft.com/de-de/library/ms221236(v=vs.100) beschrieben werden.

VT_BSTR | VT_BYREF

Ein Verweis auf eine Zeichenfolge wurde übergeben. Ein BSTR 1, die auf ein BSTR verweist ist in PbstrVal. Der Zeiger auf die verwiesen wird muss abgerufen oder von den Funktionen BSTR freigegeben.

VT_DECIMAL

Decimal-Variablen werden als 96-Bit-(12 Byte) Ganzzahlen ohne Vorzeichen mit einer Variablen Potenz zur Basis 10 skaliert gespeichert. VT_DECIMAL verwendet der gesamte 16 Bytes der Variante.

VT_DECIMAL | VT_BYREF

Ein Verweis auf einen decimal-Wert wurde übergeben. Ein Zeiger auf den Wert ist in PdecVal.

VT_NULL

Verteilung gestartet null Wert wurde angegeben. (Dies sollte nicht mit null-Zeiger verwechselt werden.) Der null-Wert wird als mit SQL für Zuständen Logik verwendet.

VT_NULL | VT_BYREF

Nicht gültig.

VT_ERROR

Ein SCODE wurde angegeben. Der Fehlertyp wird in Scodee angegeben. Operationen auf Fehlerwerte sollten im Allgemeinen eine Ausnahme auslösen oder den Fehler der Rückgabewert entsprechend weitergegeben.

VT_ERROR | VT_BYREF

Ein Verweis auf ein SCODE wurde übergeben. Ein Zeiger auf den Wert ist in Pscode.

VT_BOOL

Eine 16-Bit Boolean (True/False) Wert wurde angegeben. Der Wert 0xFFFF (alle Bits 1) gibt True; an.der Wert von 0 (alle Bits 0) gibt False an. Es sind keine anderen Werte gültig.

VT_BOOL | VT_BYREF

Ein Verweis auf einen booleschen Wert. Ein Zeiger auf den booleschen Wert ist im Pbool.

VT_DATE

Ein Wert ein Datum und Zeit wurde angegeben. Datumsangaben dargestellt werden als mit doppelter Genauigkeit Zahlen, wobei Mitternacht, 01.01.1900 2.0 ist 2 Januar 1900 ist, 3.0, usw.. Der Wert wird im Datum übergeben.

Dies ist das gleiche Nummerierungssystem von den meisten Kalkulationstabelle Programmen verwendet wird, obwohl einige, Februar 29 1900 vorhanden waren und daher 1.0 festlegen, 01.01.1900 falsch angeben. Das Datum kann in und aus einer MS-DOS-Darstellung mit VariantTimeToDosDateTime, konvertiert werden die in konvertieren und Bearbeiten von Funktionen https://msdn.microsoft.com/de-de/library/ms221236(v=vs.100) erläutert wird.

VT_DATE | VT_BYREF

Ein Verweis auf ein Datum wurde übergeben. Ein Zeiger auf den Wert ist im ktualisieren.

VT_DISPATCH

Ein Zeiger auf ein Objekt wurde angegeben. Der Zeiger ist im PdispVal. Dieses Objekt wird nur zum Implementieren von IDispatch bezeichnet. Das Objekt kann, ob es andere gewünschte Schnittstelle, unterstützt durch Aufrufen von QueryInterface für das Objekt abgefragt werden. Objekte, die nicht implementieren, IDispatch sollten mit VT_UNKNOWN übergeben werden.

VT_DISPATCH | VT_BYREF

Ein Zeiger auf einen Zeiger auf ein Objekt wurde angegeben. Der Zeiger auf das Objekt wird in den Speicherort verweist PpdispVal gespeichert.

VT_VARIANT

Ist ungültig. VARIANTARGs muss nach Verweis übergeben werden.

VT_VARIANT | VT_BYREF

PvarVal wird ein Zeiger auf einen anderen VARIANTARG übergeben. Diese referenzierten VARIANTARG PvarVal, sein nicht anderen VT_VARIANT|VT_BYREF. Dieser Wert kann verwendet werden, Sprachen unterstützen, die Funktionen, um die Typen als Verweis übergebenen Variablen ändern können.

VT_UNKNOWN

Ein Zeiger auf ein Objekt, das IUnknown die Schnittstelle implementiert, ist im PunkVal übergeben.

VT_UNKNOWN | VT_BYREF

Ein Zeiger auf die IUnknown -Schnittstelle ist im PpunkVal übergeben. Zeiger auf die Schnittstelle wird in den Speicherort verweist PpunkVal gespeichert.

VT_ARRAY | < alles >

Ein Array des Datentyps < alles >wurde übergeben. (VT_EMPTY und VT_NULL sind ungültige Typen kombinieren mit VT_ARRAY.) Der Zeiger in Parray zeigt auf ein Arraydeskriptor, die die Dimensionen, Größe und Speicherort des Arrays beschreibt. Der Arraydeskriptor erfolgt nie direkt, aber stattdessen wird gelesen und mithilfe von in konvertieren und Bearbeiten von Funktionen beschriebenen Funktionen geändert.

Siehe auch

Konzepte

IDispatch-Datentypen und Strukturen

Datentypen, Strukturen und Enumerationen (Component-Automatisierung)