PROPVARIANT
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