MSDN中关于VARTYPE的定义如下,我不太明白哦,这里不是将VARTYPE定义为unsigned short,怎么又跟下面的VARENUM关联起来了?
还有,对VARIANT的定义中,typedef struct tagVARIANT {};是什么意思啊,怎么跟typedef struct FARSTRUCT tagVARIANT VARIANT; 联系起来。也不太明白vt与联合体的关系。
我是个新手啊,还请各位大侠指点指点呐,小弟谢过typedef unsigned short VARTYPE;
enum VARENUM{
VT_EMPTY = 0, // Not specified.
VT_NULL = 1, // Null.
VT_I2 = 2, // 2-byte signed int.
VT_I4 = 3, // 4-byte signed int.
VT_R4 = 4, // 4-byte real.
VT_R8 = 5, // 8-byte real.
VT_CY = 6, // Currency.
VT_DATE = 7, // Date.
VT_BSTR = 8, // Binary string.
VT_DISPATCH = 9, // IDispatch
VT_ERROR = 10, // Scodes.
VT_BOOL = 11, // Boolean; True=-1, False=0.
VT_VARIANT = 12, // VARIANT FAR*.
VT_UNKNOWN = 13, // IUnknown FAR*.
VT_UI1 = 17, // Unsigned char. // Other constants that are not valid in VARIANTs omitted here.};
typedef struct FARSTRUCT tagVARIANT VARIANT;
typedef struct FARSTRUCT tagVARIANT VARIANTARG;typedef struct tagVARIANT {
VARTYPE vt;
unsigned short wReserved1;
unsigned short wReserved2;
unsigned short wReserved3;
union {
unsigned char bVal; // VT_UI1.
short iVal; // VT_I2 .
long lVal; // VT_I4 .
float fltVal; // VT_R4 .
double dblVal; // VT_R8 .
VARIANT_BOOL boolVal; // VT_BOOL.
SCODE scode; // VT_ERROR.
CY cyVal; // VT_CY .
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
IUnknown FAR* punkVal; // VT_UNKNOWN.
IDispatch FAR* pdispVal; // VT_DISPATCH.
SAFEARRAY FAR* parray; // VT_ARRAY|*.
unsigned char FAR* pbVal; // VT_BYREF|VT_UI1.
short FAR* piVal; // VT_BYREF|VT_I2.
long FAR* plVal; // VT_BYREF|VT_I4.
float FAR* pfltVal; // VT_BYREF|VT_R4.
double FAR* pdblVal; // VT_BYREF|VT_R8.
VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL.
SCODE FAR* pscode; // VT_BYREF|VT_ERROR.
CY FAR* pcyVal; // VT_BYREF|VT_CY.
DATE FAR* pdate; // VT_BYREF|VT_DATE.
BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
void FAR* byref; // Generic ByRef.
};
};
还有,对VARIANT的定义中,typedef struct tagVARIANT {};是什么意思啊,怎么跟typedef struct FARSTRUCT tagVARIANT VARIANT; 联系起来。也不太明白vt与联合体的关系。
我是个新手啊,还请各位大侠指点指点呐,小弟谢过typedef unsigned short VARTYPE;
enum VARENUM{
VT_EMPTY = 0, // Not specified.
VT_NULL = 1, // Null.
VT_I2 = 2, // 2-byte signed int.
VT_I4 = 3, // 4-byte signed int.
VT_R4 = 4, // 4-byte real.
VT_R8 = 5, // 8-byte real.
VT_CY = 6, // Currency.
VT_DATE = 7, // Date.
VT_BSTR = 8, // Binary string.
VT_DISPATCH = 9, // IDispatch
VT_ERROR = 10, // Scodes.
VT_BOOL = 11, // Boolean; True=-1, False=0.
VT_VARIANT = 12, // VARIANT FAR*.
VT_UNKNOWN = 13, // IUnknown FAR*.
VT_UI1 = 17, // Unsigned char. // Other constants that are not valid in VARIANTs omitted here.};
typedef struct FARSTRUCT tagVARIANT VARIANT;
typedef struct FARSTRUCT tagVARIANT VARIANTARG;typedef struct tagVARIANT {
VARTYPE vt;
unsigned short wReserved1;
unsigned short wReserved2;
unsigned short wReserved3;
union {
unsigned char bVal; // VT_UI1.
short iVal; // VT_I2 .
long lVal; // VT_I4 .
float fltVal; // VT_R4 .
double dblVal; // VT_R8 .
VARIANT_BOOL boolVal; // VT_BOOL.
SCODE scode; // VT_ERROR.
CY cyVal; // VT_CY .
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
IUnknown FAR* punkVal; // VT_UNKNOWN.
IDispatch FAR* pdispVal; // VT_DISPATCH.
SAFEARRAY FAR* parray; // VT_ARRAY|*.
unsigned char FAR* pbVal; // VT_BYREF|VT_UI1.
short FAR* piVal; // VT_BYREF|VT_I2.
long FAR* plVal; // VT_BYREF|VT_I4.
float FAR* pfltVal; // VT_BYREF|VT_R4.
double FAR* pdblVal; // VT_BYREF|VT_R8.
VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL.
SCODE FAR* pscode; // VT_BYREF|VT_ERROR.
CY FAR* pcyVal; // VT_BYREF|VT_CY.
DATE FAR* pdate; // VT_BYREF|VT_DATE.
BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
void FAR* byref; // Generic ByRef.
};
};
解决方案 »
- 高手看过来,有个怪异的想法,不知可否实现
- 关于使用对象启动线程的问题
- "试图越过其尾端对一个未命名的文件进行读写"???
- 请问如何实现控件ActiveX打印功能
- 基础问题:类中的Public ,private ,protected 有什么用?
- newkey007,谢谢你,进来接分啊!这里有使用adox的一个简单例子,欢迎大家来看。
- 对话框如何实现一启动就隐藏起来到系统托盘
- (你们都理解错了,重新来)高手请进:VC,一个基于CFormView类建立的单文档应用程序中关于如何调用不同的那个类似对话框的客户区
- 关于宏定义
- [救命]有人会用VC++写一文件系统的备份的程序吗?
- 请教,关于时钟 On Timer 的问题:
- Socket全局如何定义。
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nLength;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < nLength; i++)
SafeArrayPutElement (psa, &i, pBufEx++);
VARIANT varBLOB; //定义对象
varBLOB.vt = VT_ARRAY | VT_UI1;//给出数据的类型,用枚举类可以减少错误
varBLOB.parray = psa;//数据保存在这里
//所谓union,就是其中的数据类型,你代码中可以任选一种,编译时,
//就按该类型来分配内存空间
//这里是parray,是一个指向数组的指针。
typedef struct tagVARIANT {};是说tagVARIANT相当于:struct{ VARTYPE vt;
unsigned short wReserved1;
unsigned short wReserved2;
unsigned short wReserved3;
union {
unsigned char bVal; // VT_UI1.
short iVal; // VT_I2 .
long lVal; // VT_I4 .
.......}typedef struct FARSTRUCT tagVARIANT VARIANT;
//VARIANT 相当于 struct FARSTRUCT tagVARIANT
//就是用 tagVARIANT 来定义 VARIANT
//我们最终用 VARIANT
typedef struct tagPoint
{
...
}Point;
这个我可以理解,就是定义个同义的Point;
但是
typedef struct tagVARIANT
{
...
};
这种用法是什么意思,貌似还是不太懂哦,能否给我讲一下?
{
...
}Point;
中tagPoint是struct名,Point是typedef给予的别名。typedef struct //省略tagPoint是可以的
{
...
}Point;
typedef struct tagVARIANT { };
看起来象是:
typedef struct tagPoint
{
...
};//省掉了Point那么这里typedef似乎是多余的,为什么不直接这样定义:struct tagVARIANT { };我也不知何故。