Compartilhar via


PROPVARIANT

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa estrutura é usada para definir a marca tipo e o valor de uma propriedade em conjunto um propriedade. Há cinco membros. O primeiro membro, o valor-marca tipo e o último membro, o valor da propriedade, são significativos. Os membros três intermediário são reservados para uso futuro.

Observação

O bool membro em definições anteriores desta estrutura foi renomeado para boolVal, porque alguns compiladores reconhecem agora bool Como um palavra-chave.

Observação

A estrutura PROPVARIANT, definida abaixo, contém tipos que podem ser serializado na propriedade versão 1 Definir formato serialização.O formato versão 1 oferece suporte a todos os tipos permitidos em formato de versão 0 mais alguns tipos adicionais.Os tipos adicionados incluem "Version 1" No campo de comentar abaixo.Use esses tipos somente se destina um conjunto propriedade versão 1.

Syntax

typedef struct PROPVARIANT {
  VARTYPE vt;
  WORD    wReserved1;
  WORD    wReserved2;
  WORD    wReserved3;
  union {
    CHAR              cVal;
    UCHAR             bVal;
    SHORT             iVal; 
    USHORT            uiVal;
    LONG              lVal; 
    ULONG             ulVal;
    INT               intVal;
    UINT              uintVal;
    LARGE_INTEGER     hVal;
    ULARGE_INTEGER    uhVal;
    FLOAT             fltVal;
    DOUBLE            dblVal;
    VARIANT_BOOL      boolVal;
    SCODE             scode; 
    CY                cyVal;
    DATE              date;
    FILETIME          filetime;
    CLSID*            puuid;
    CLIPDATA*         pclipdata;
    BSTR              bstrVal;
    BSTRBLOB          bstrblobVal;
    BLOB              blob;
    LPSTR             pszVal;
    LPWSTR            pwszVal;
    IUnknown*         punkVal;
    IDispatch*        pdispVal;
    IStream*          pStream; 
    IStorage*         pStorage;
    LPVERSIONEDSTREAM pVersionedStream;
    LPSAFEARRAY       parray;
    CAC               cac;
    CAUB              caub;
    CAI               cai;
    CAUI              caui;
        CAL               cal;
    CAUL              caul;
    CAH               cah;
    CAUH              cauh;
    CAFLT             caflt;
    CADBL             cadbl; 
    CABOOL            cabool; 
    CASCODE           cascode;
    CACY              cacy;
    CADATE            cadate;
    CAFILETIME        cafiletime;
    CACLSID           cauuid;
    CACLIPDATA        caclipdata;
    CABSTR            cabstr;
    CABSTRBLOB        cabstrblob;
    CALPSTR           calpstr;
    CALPWSTR          calpwstr;
    CAPROPVARIANT     capropvar;
    CHAR*             pcVal;
    UCHAR*            pbVal;
    SHORT*            piVal;
    USHORT*           puiVal;
    LONG*             plVal;
    ULONG*            pulVal;
    INT*              pintVal;
    UINT*             puintVal;
    FLOAT*            pfltVal;
    DOUBLE*           pdblVal;
    VARIANT_BOOL*     pboolVal;
    DECIMAL*          pdecVal;
    SCODE*            pscode;
    CY*               pcyVal;
    DATE*             pdate;
    BSTR*             pbstrVal;
    IUnknown**        ppunkVal;
    IDispatch**       ppdispVal;
    LPSAFEARRAY*      pparray;
    PROPVARIANT*      pvarVal;
  };
} PROPVARIANT;

Parameters

  • VT
    Marca Valor tipo.
  • wReserved1
    Reservado para uso futuro.
  • wReserved2
    Reservado para uso futuro.
  • wReserved3
    Reservado para uso futuro.
  • cVal
    VT_I1, versão 1
  • bVal
    VT_UI1
  • iVal
    VT_I2
  • uiVal
    VT_UI2
  • lVal
    VT_l4
  • ulVal
    VT_UI4
  • intVal
    VT_INT, versão 1
  • uintVal
    VT_UINT, versão 1
  • hVal
    VT_I8
  • uhVal
    VT_UI8
  • fltVal
    VT_R4
  • dblVal
    VT_R8
  • boolVal
    VT_BOOL
  • SCode
    VT_ERROR
  • cyVal
    VT_CY
  • Data
    VT_DATE
  • FileTime
    VT_FILETIME
  • puuid
    VT_CLSID
  • pclipdata
    VT_CF
  • bstrVal
    VT_BSTR
  • bstrblobVal
    VT_BSTR_BLOB
  • blob
    VT_BLOB, VT_BLOBOBJECT
  • pszVal
    VT_LPSTR
  • pwszVal
    VT_LPWSTR
  • punkVal
    VT_UNKNOWN
  • pdispVal
    VT_DISPATCH
  • pStream
    VT_STREAM, VT_STREAMED_OBJECT
  • pStorage
    VT_STORAGE, VT_STORED_OBJECT
  • pVersionedStream
    VT_VERSIONED_STREAM
  • parray
    VT_ARRAY | VT_ *, versão 1
  • cac
    VT_VECTOR | VT_I1, versão 1
  • caub
    VT_VECTOR | VT_UI1
  • cai
    VT_VECTOR | VT_I2
  • caui
    VT_VECTOR | VT_UI2
  • CAL
    VT_VECTOR | VT_l4
  • caul
    VT_VECTOR | VT_UI4
  • cah
    VT_VECTOR | VT_I8
  • cauh
    VT_VECTOR | VT_UI8
  • caflt
    VT_VECTOR | VT_R4
  • cadbl
    VT_VECTOR | VT_R8
  • cabool
    VT_VECTOR | VT_BOOL
  • cascode
    VT_VECTOR | VT_ERROR
  • cacy
    VT_VECTOR | VT_CY
  • cadate
    VT_VECTOR | VT_DATE
  • cafiletime
    VT_VECTOR | VT_FILETIME
  • cauuid
    VT_VECTOR | VT_CLSID
  • caclipdata
    VT_VECTOR | VT_CF
  • cabstr
    VT_VECTOR | VT_BSTR
  • cabstrblob
    VT_VECTOR | VT_BSTR_BLOB
  • calpstr
    VT_VECTOR | VT_LPSTR
  • calpwstr
    VT_VECTOR | VT_LPWSTR
  • capropvar
    VT_VECTOR | VT_VARIANT
  • pcVal
    VT_BYREF | VT_I1, versão 1
  • pbVal
    VT_BYREF | VT_UI1, versão 1
  • piVal
    VT_BYREF | VT_I2, versão 1
  • puiVal
    VT_BYREF | VT_UI2, versão 1
  • plVal
    VT_BYREF | VT_l4, versão 1
  • pulVal
    VT_BYREF | VT_UI4, versão 1
  • pintVal
    VT_BYREF | VT_INT, versão 1
  • puintVal
    VT_BYREF | VT_UINT, versão 1
  • pfltVal
    VT_BYREF | VT_R4, versão 1
  • pdblVal
    VT_BYREF | VT_R8, versão 1
  • pboolVal
    VT_BYREF | VT_BOOL, versão 1
  • pdecVal
    VT_BYREF | VT_DECIMAL, versão 1
  • pscode
    VT_BYREF | VT_ERROR, versão 1
  • pcyVal
    VT_BYREF | VT_CY, versão 1
  • at alizar
    VT_BYREF | VT_DATE, versão 1
  • pbstrVal
    VT_BYREF | VT_BSTR, versão 1
  • ppunkVal
    VT_BYREF | VT_UNKNOWN, versão 1
  • ppdispVal
    VT_BYREF | VT_DISPATCH, versão 1
  • pparray
    VT_BYREF | VT_ARRAY, versão 1
  • pvarVal
    VT_BYREF | VT_VARIANT, versão 1

Remarks

O PROPVARIANT estrutura também pode conter um valor de VT_DECIMAL:

    DECIMAL       decVal;        //VT_DECIMAL

No entanto, o valor da DECIMAL estrutura requer manipulação especial. O DECIMAL estrutura é o mesmo tamanho como um todo PROPVARIANT estrutura e não cabe a união que contém todos os outros tipos de valores. Em vez disso, o valor da DECIMAL estrutura ocupa toda a PROPVARIANT estrutura, inclusive os campos reservados e o VT membro. No entanto, o primeiro membro das DECIMAL estrutura não é usada e é igual no tamanho para o VT membro das PROPVARIANT estrutura. Portanto, o PROPVARIANT estrutura declaração no arquivo de cabeçalho propidl.h define o decVal membro de tal forma que ele corresponde ao início das PROPVARIANT estrutura. Portanto, para pôr o valor da DECIMAL estrutura em um PROPVARIANT estrutura, o valor deve ser carregado na decVal membro e o VT membro é definido como VT_DECIMAL, apenas as for qualquer outro valor.

O tipo de dados PROPVARIANT estiver relacionado para o tipo de dados Variant, definidas como parte da automação no OLE2. Várias definições são reutilizadas de automação, da seguinte maneira:

typedef struct  tagCY {
    unsigned long      Lo;
    long               Hi;
    } CY;
 
typedef struct  tagDEC {
    USHORT             wReserved;
    BYTE               scale;
    BYTE               sign;
    ULONG              Hi32;
    ULONGLONG          Lo64;
    } DECIMAL;
 
typedef struct  tagSAFEARRAYBOUND {
    ULONG              cElements;
    LONG               lLbound;
    } SAFEARRAYBOUND;
 
typedef struct  tagSAFEARRAY {
    USHORT             cDims;
    USHORT             fFeatures;
    ULONG              cbElements;
    ULONG              cLocks;
    PVOID              pvData;
    SAFEARRAYBOUND     rgsabound [ * ];
    } SAFEARRAY;
 
typedef CY             CURRENCY;
typedef short          VARIANT_BOOL;
typedef unsigned short VARTYPE;
typedef double         DATE;
typedef OLECHAR*       BSTR;

Além disso, alguns tipos são exclusivo para a estrutura PROPVARIANT:

typedef struct  tagCLIPDATA {
    // cbSize is the size of the buffer pointed to 
    // by pClipData, plus sizeof(ulClipFmt)
    ULONG              cbSize;
    long               ulClipFmt;
    BYTE*              pClipData;
    } CLIPDATA;

Entre o exclusivo PROPVARIANT Tipos são vários tipos dados que definem contados matrizes de outros tipos dados. Tipos de matrizes de contagem todos os dados começam com as letras CA, de exemplo CAUB, e têm um operador OR VT valor (o VarType do elemento) e um operador OR com VT_VECTOR. A estrutura de contagem matriz tem a seguinte forma (onde Nome é o nome específico da matriz de contagem).

#define TYPEDEF_CA(type, name) 
typedef struct tag ## name {\
        ULONG cElems;\
        type *pElems;\
        } name
Tipo Propvariant O código Membro PROPVARIANT Representação valor

VT_EMPTY

0

Nenhum

Uma propriedade com um indicador tipo de VT_EMPTY tem não dados associado com ele; Isto é, o tamanho do valor é zero.

VT_NULL

1

Nenhum

Isso é como um ponteiro para NULL.

VT_I1

16

cVal

1-byte número inteiro assinado.

VT_UI1

17

bVal

1-byte inteiro sem assinatura.

VT_I2

2

iVal

Dois bytes que representa um 2-byte assinado valor inteiro.

VT_UI2

18

uiVal

2-byte inteiro sem assinatura.

VT_l4

3

lVal

4-byte assinado valor inteiro.

VT_UI4

19

ulVal

4-byte inteiro sem assinatura.

VT_INT

22

intVal

4-byte assinado valor inteiro (equivalente ao VT_l4).

VT_UINT

23

uintVal

4-byte inteiro sem assinatura (equivalente ao VT_UI4).

VT_I8

20

hVal

8-byte número inteiro assinado.

VT_UI8

21

uhVal

8-byte inteiro sem assinatura.

VT_R4

4

fltVal

32-bit IEEE valor de ponto flutuante.

VT_R8

5

dblVal

64-bit IEEE valor de ponto flutuante.

VT_BOOL

11

boolVal (bool em projetos anteriores)

Boolean valor, uma palavra que contém 0 (FALSE) ou -1 (TRUE).

VT_ERROR

10

SCode

Uma DWORD que contém um codificar status.

VT_CY

6

cyVal

8-byte do dois complementam inteiro (dimensionado por 10.000). Esse tipo é comumente usado para quantidades unidade monetária.

VT_DATE

7

Data

Um 64-bit que representa o número de dias (não segundos) desde December 31, 1899 número de ponto flutuante. De exemplo, 1 º de janeiro de 1900, é 2.0, 2 de janeiro de 1900, 3.0 e assim por diante). Isso é armazenado na mesma representação como VT_R8.

VT_FILETIME

64

FileTime

64-bit FILETIME estrutura. É recomendável que todos os horários ser armazenados em Universal Coordinate Time (UTC).

VT_CLSID

72

puuid

Ponteiro para um identificador (CLSID) classe (ou outras identificador exclusivo (GUID)).

VT_CF

71

pclipdata

Ponteiro para um CLIPDATA estrutura, descrita acima.

VT_BSTR

8

bstrVal

Ponteiro para uma seqüência de caracteres Unicode NULL-Terminated. O seqüência de caracteres imediatamente é precedido por uma DWORD que representam o contagem de bytes, mas bstrVal Pontos após este DWORD para o primeiro caractere da seqüência de caracteres. BSTRs devem ser alocadas e liberado usando a automação SysAllocString e SysFreeString chamadas.

VT_BSTR_BLOB

0xfff

bstrblobVal

Para uso somente sistema.

VT_BLOB

65

blob

DWORD contagem de bytes, seguido por que muitos bytes de dados. O contagem de bytes não inclui os quatro bytes para o período de contagem si mesmo; Um vazio membro blob teria uma contagem do zero, seguido por zero bytes. Isso é semelhante para o valor VT_BSTR, mas não garante um NULL byte no final de dados.

VT_BLOBOBJECT

70

blob

Um membro blob contendo um serializado objeto na mesma representação que apareceria em VT_STREAMED_OBJECT. That is, uma DWORD contagem de bytes (onde o contagem de bytes não inclui o tamanho dele) que é o formato de um identificador classe seguido dados inicialização para essa classe.

 

 

 

A diferença entre VT_BLOB_OBJECT e VT_STREAMED_OBJECT somente significativa é que o antigo não tem o sistema-nível armazenamento sobrecarga que o último seria tem e, portanto, é mais adequado para situações que envolvam números dos objetos pequenos.

VT_LPSTR

30

pszVal

Ponteiro para uma seqüência ANSI NULL-Terminated no página de código usar como padrão de sistema.

VT_LPWSTR

31

pwszVal

Ponteiro para uma seqüência de caracteres Unicode NULL-Terminated na localidade usar como padrão do usuário.

VT_UNKNOWN

13

punkVal

Novo

VT_DISPATCH

9

pdispVal

Novo

VT_STREAM

66

pStream

Ponteiro para uma interface IStream, que representa um transmitir que é um irmão para o "Conteúdo" transmitir.

VT_STREAMED_OBJECT

68

pStream

Como em VT_STREAM, mas indica que a transmitir contém um serializado objeto, que é um CLSID seguido dados inicialização para a classe. A transmitir é um irmão para o "Conteúdo" transmitir que contém a propriedade definido.

VT_STORAGE

67

pStorage

Ponteiro para uma interface IStorage, que representa um objeto armazenamento que é um irmão para o "Conteúdo" transmitir.

VT_STORED_OBJECT

69

pStorage

Como em VT_STORAGE, mas indica que o designado IStorage Contém um objeto carregável.

VT_VERSIONED_STREAM

73

pVersionedStream

Um transmitir com uma versão GUID.

VT_DECIMAL

14

decVal

A DECIMAL estrutura.

VT_VECTOR

0X1000

CA *

Se o indicador tipo é combinado com VT_VECTOR usando um operador OR, o valor é um dos valores a matriz de contagem. Isso cria uma contagem dos elementos, seguidos por um ponteiro para as repetições especificadas do valor DWORD.

 

 

 

Por exemplo, um indicador tipo de VT_LPSTR|VT_VECTOR tem uma contagem elemento DWORD, seguida por um ponteiro para uma matriz de elementos LPSTR.

 

 

 

VT_VECTOR podem ser combinados por um operador OR com o seguinte tipos: VT_I1, VT_UI1, VT_I2, VT_UI2, VT_BOOL, VT_l4, VT_UI4, VT_R4, VT_R8, VT_ERROR, VT_I8, VT_UI8, VT_CY, VT_DATE, VT_FILETIME, VT_CLSID, VT_CF, VT_BSTR, VT_LPSTR, VT_LPWSTR e VT_VARIANT. VT_VECTOR também podem ser combinados por uma operação ou com VT_BSTR_BLOB, mas ele é para somente uso sistema.

VT_ARRAY

0x2000

Parray

Se o indicador tipo é combinado com VT_ARRAY por uma operador OR, o valor é um ponteiro para um SafeArray. VT_ARRAY podem usar tipos dados de ou com o seguinte: VT_I1, VT_UI1, VT_I2, VT_UI2, VT_l4, VT_UI4, VT_INT, VT_UINT, VT_R4, VT_R8, VT_BOOL, VT_DECIMAL, VT_ERROR, VT_CY, VT_DATE, VT_BSTR, VT_DISPATCH, VT_UNKNOWN e VT_VARIANT. VT_ARRAY Não é possível usar ou com VT_VECTOR.

VT_BYREF

0x4000

p *

Se o indicador tipo é combinado com VT_BYREF por uma operador OR, o valor é uma referência. Tipos de referência são interpretados como uma referência a dados, semelhante de tipo de referência no C++ (de exemplo, " int & ").

 

 

 

VT_BYREF pode usar ou com o seguinte tipos: VT_I1, VT_UI1, VT_I2, VT_UI2, VT_l4, VT_UI4, VT_INT, VT_UINT, VT_R4, VT_R8, VT_BOOL, VT_DECIMAL, VT_ERROR, VT_CY, VT_DATE, VT_BSTR, VT_UNKNOWN, VT_DISPATCH, VT_ARRAY e VT_VARIANT.

VT_VARIANT

12

capropvar

Um indicador tipo DWORD seguido de correspondente valor. VT_VARIANT pode ser usado somente com VT_VECTOR ou VT_BYREF.

VT_TYPEMASK

0xFFF

 

Usado como uma máscara para VT_VECTOR e outras modificadores para extrair o processado VT valor.

Requirements

Header oaidl.h
Windows Embedded CE Windows CE 2.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also

Reference

Automation Structures
IStream
IStorage
FreePropVariantArray
PropVariantClear
PropVariantCopy

Other Resources

FILETIME