C/C++ 中Delphi 类型TVarType和OleVariant的类似物是什么?
问问题
956 次
3 回答
4
等价于VARIANT 结构OleVariant
,它被包装在 Visual C++中的_variant_t 类中。
相当于VARTYPE typedefTVarType
,从技术上讲,它是unsigned short ,但它包含VARENUM enumeration的值。
于 2012-10-29T09:41:44.280 回答
2
好吧,从他们自己的文档中可以清楚地看出——第一个只是一个无符号字——一个 uint_16。
第二个有点难以解释。它基本上是一个包含一大堆字段的大型结构。这一种数据类型包括可以传输到/从 COM 对象传输的每种数据类型的字段。这意味着您只需要关心向/从对象传递变体即可。然后由你们每个人(程序员/COM 对象)在相关位置提取/插入数据。
也许我不应该,但这是来自 oaidl.h (gcc, win32) 的 VARIANT 的定义
typedef struct tagVARIANT {
_ANONYMOUS_UNION union {
struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
_ANONYMOUS_UNION union {
long lVal;
LONGLONG llVal;
unsigned char bVal;
short iVal;
float fltVal;
double dblVal;
VARIANT_BOOL boolVal;
SCODE scode;
CY cyVal;
DATE date;
BSTR bstrVal;
IUnknown *punkVal;
LPDISPATCH pdispVal;
SAFEARRAY *parray;
unsigned char *pbVal;
short *piVal;
long *plVal;
LONGLONG * pllVal;
float *pfltVal;
double *pdblVal;
VARIANT_BOOL *pboolVal;
_VARIANT_BOOL *pbool;
SCODE *pscode;
CY *pcyVal;
DATE *pdate;
BSTR *pbstrVal;
IUnknown **ppunkVal;
LPDISPATCH *ppdispVal;
SAFEARRAY **pparray;
struct tagVARIANT *pvarVal;
void *byref;
CHAR cVal;
USHORT uiVal;
ULONG ulVal;
ULONGLONG ullVal;
INT intVal;
UINT uintVal;
DECIMAL *pdecVal;
CHAR *pcVal;
USHORT *puiVal;
ULONG *pulVal;
ULONGLONG * pullVal;
INT *pintVal;
UINT *puintVal;
_ANONYMOUS_STRUCT struct {
PVOID pvRecord;
struct IRecordInfo *pRecInfo;
} __VARIANT_NAME_4;
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
} VARIANT,*LPVARIANT;
于 2012-10-29T07:48:37.873 回答
0
如果您专门使用 C++Builder,它有自己的类型TVarType
和OleVariant
与那些 Delphi 类型直接相关的类型。 TVarType
在 System.hpp 中声明,并OleVariant
在 systvari.h 中声明,就像您链接到的文档所说的那样。
于 2012-10-29T23:16:08.093 回答