PropVariantChangeType-Funktion (propvarutil.h)

Wandelt einen wert, der als PROPVARIANT-Struktur gespeichert ist, in einen äquivalenten Wert eines anderen Variantentyps um.

Syntax

PSSTDAPI PropVariantChangeType(
  [out] PROPVARIANT          *ppropvarDest,
  [in]  REFPROPVARIANT       propvarSrc,
  [in]  PROPVAR_CHANGE_FLAGS flags,
  [in]  VARTYPE              vt
);

Parameter

[out] ppropvarDest

Typ: PROPVARIANT*

Ein Zeiger auf eine PROPVARIANT-Struktur , die nach erfolgreicher Rückgabe dieser Funktion den koercierten Wert und den neuen Typ empfängt.

[in] propvarSrc

Typ: REFPROPVARIANT

Ein Verweis auf die PROPVARIANT-Quellstruktur , die den Wert enthält, der als ursprünglicher Typ ausgedrückt wird.

[in] flags

Typ: PROPVAR_CHANGE_FLAGS

Reserviert, muss 0 sein.

[in] vt

Typ: VARTYPE

Gibt den neuen Typ für den Wert an. In den folgenden Tabellen finden Sie erkannte Typnamen.

Rückgabewert

Typ: HRESULT

Gibt bei erfolgreicher Ausführung S_OK oder andernfalls einen COM-Standardfehlerwert zurück. Wenn die angeforderte Nötigung nicht möglich ist, wird ein Fehler zurückgegeben.

Hinweise

Beachten Sie, dass es sich bei den PROPVARIANT-Quell - und Zielstrukturen um separate Strukturen handeln muss. Sie können die PROPVARIANT-Quelldaten nicht mit den neuen Zieldaten überschreiben. Der Versuch, dies zu tun, führt zu einem Fehler.

PropVariantChangeType konvertiert Werte wie folgt zwischen den folgenden Typen. Zahlen beziehen sich auf Bedingungen, die nach den Tabellen erläutert werden.

VT_LPWSTR VT_BSTR VT_BOOL VT_FILETIME VT_DATE VT_CLSID
VT_LPWSTR Yes Yes Ja Ja (2) Ja (2) Yes
VT_BSTR Yes Yes Ja Ja (2) Ja (2) Yes
VT_BOOL Yes Yes Ja Nein No No
VT_I2 Yes Yes Ja Nein No No
VT_I4 Yes Yes Ja Nein No No
VT_I8 Yes Yes Ja Nein No No
VT_UI2 Yes Yes Ja Nein No No
VT_UI4 Yes Yes Ja Nein No No
VT_UI8 Yes Yes Ja Nein No No
VT_R8 Ja (3) Ja (3) Ja Nein No No
VT_FILETIME Ja (2) Ja (2) Nein Ja Ja Nein
VT_DATE Ja (2) Ja (2) Nein Ja Ja Nein
VT_CLSID Yes Ja Nein No Nein Ja
 
VT_I2 VT_I4 VT_I8 VT_UI2 VT_UI4 VT_UI8 VT_R8
VT_LPWSTR Yes Yes Yes Yes Yes Yes Ja (3)
VT_BSTR Yes Yes Yes Yes Yes Yes Ja (3)
VT_BOOL Yes Yes Yes Yes Yes Yes Yes
VT_I2 Yes Yes Ja Ja (1) Ja (1) Ja (1) Ja (1)
VT_I4 Ja (1) Yes Ja Ja (1) Ja (1) Ja (1) Ja (1)
VT_I8 Ja (1) Ja (1) Ja Ja (1) Ja (1) Ja (1) Ja (1)
VT_UI2 Ja (1) Yes Yes Yes Yes Ja Ja (1)
VT_UI4 Ja (1) Ja (1) Ja Ja (1) Yes Ja Ja (1)
VT_UI8 Ja (1) Ja (1) Ja (1) Ja (1) Ja (1) Ja Ja (1)
VT_R8 Ja (1) Ja (1) Ja (1) Ja (1) Ja (1) Ja (1) Yes
VT_FILETIME No No No No No No No
VT_DATE No No No No No No No
VT_CLSID No No No No No No No
 

Bedingungen

  1. Beim Konvertieren zwischen numerischen Typen schlagen Konvertierungen außerhalb des Bereichs fehl. Für instance ein negativer Vorzeichenwert für einen typ ohne Vorzeichen oder ein Wert ohne Vorzeichen mit 4 Byte größer als 65535 für einen 2-Byte-Typ ohne Vorzeichen.
  2. Beim Konvertieren zwischen Zeichenfolgen und Datumsangaben wird anstelle einer lokalisierten oder "menschenlesbaren" Darstellung ein kanonisches Zeichenfolgenformular verwendet. Das Format lautet "jjjj/mm/tt:hh:mm:ss.fff" (Jahr, Monat, Datum, Stunden, Minuten, Sekunden, Millisekunden). Beachten Sie, dass dies eine geringere Genauigkeit ist, als vom FILETIME-Typ unterstützt wird, aber für die meisten Zwecke ausreichend sein sollte.
  3. Beim Konvertieren zwischen Gleitkommazahlen und Zeichenfolgen wird das Dezimaltrennzeichen des aktuellen Gebietsschemas verwendet. Beachten Sie, dass dies Probleme verursachen kann, wenn diese Werte in Dateien gespeichert werden, die zwischen verschiedenen Gebietsschemas verschoben werden.
Hinweis In Zukunft werden möglicherweise weitere Typen unterstützt.
 
Die Konvertierung zwischen Vektoren (VT_VECTOR) und Arrays (VT_ARRAY) wird in einigen Fällen unterstützt. Wenn es unterstützt wird, muss die Anzahl der Elemente in jedem identisch sein. Ein einwertige Vektor kann in einen Nicht-Vektorwert konvertiert werden, aber ein mehrwertiges Vektor kann nicht in einen Nicht-Vektortyp konvertiert werden.

Die Coercion zwischen Typen erfolgt ohne Rücksicht auf eigenschaftsspezifische Informationen. Eigenschaftenspezifische Coercions sollten mit PSCoerceToCanonicalValue ausgeführt werden. Wenn die Zeichenfolgenform eines Werts für Benutzeroberflächenzwecke erforderlich ist, sollte PSFormatForDisplay außerdem verwendet werden, um den Wert gemäß gebietsschema- und eigenschaftsspezifischen Informationen zu formatieren, anstatt PropVariantChangeType zu verwenden, um den Wert in eine Zeichenfolge zu übertragen.

Beispiele

Im folgenden Codebeispiel, das als Teil eines größeren Programms eingeschlossen werden soll, wird veranschaulicht, wie PropVariantChangeType verwendet wird, um einen VT_FILETIME Wert aus einer Zeichenfolge zu initialisieren.

PROPVARIANT propvarString = {0};
                    
HRESULT hr = InitPropVariantFromString(L"2007/01/30:12:00:00.000", &propvarString);
if (SUCCEEDED(hr))
{
    PROPVARIANT propvarFiletime = {0};

    hr = PropVariantChangeType(&propvarFiletime, propvarString, 0, VT_FILETIME);
    if (SUCCEEDED(hr))
    {
        // propvarFiletime now contains the FILETIME representation 
        // of 1/30/2007 12:00 PM
        PropVariantClear(&propvarFiletime);
    }
    PropVariantClear(&propvarString);
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP mit SP2, Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 mit SP1 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile propvarutil.h
Bibliothek Propsys.lib
DLL Propsys.dll (Version 6.0 oder höher)
Verteilbare Komponente Windows Desktop Search (WDS) 3.0