谁能谈一谈VARIANT and VARIANTARG就VARIANT and VARIANTARG各自的含义,不同,及其用途,按自己理解的意思,畅所欲言一番。
解决方案 »
- 显示位图,为什么在WM_PAINT里获取的DC选进位图句柄后,不能直接显示位图,而非要先将位图选进到MemoryDC中,最后bitblt?
- 高手请进(100分)--关于SNMP管理端和代理端通信的问题
- 数据库添加记录问题.ODBC的
- 错在哪里!
- 救大家帮帮我。socket问题。
- 哪里有csdn下载?
- 我在主程序中开了个线程,怎么样在主程序关闭的时候,关闭未完成的线程啊?
- 用vc++怎样登陆到远程的SQL Server中的一个数据库啊?需要API函数登陆的,不要ADO及OLEDB 的,我是用database连接的
- 是我编译器的问题吗?
- CFileDialog 问题
- 搞不定:在数据集中再找满足条件的数据怎么做(不再访问数据库,在内存中操作)????????谢谢!
- 急问?关于消息响应!!!!!
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型数据
va.lVal=a; ///赋值 对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: VARIANT FAR* pvarVal VT_BYREF|VT_VARIANT
void FAR* byref VT_BYREF
DECIMAL FAR* pdecVal VT_BYREF|VT_DECIMAL
VARIANT_BOOL boolVal VT_BOOL
VARIANT_BOOL FAR* pboolVal VT_BYREF|VT_BOOL
SCODE scode VT_ERROR
SCODE FAR* pscode VT_BYREF|VT_ERROR
CY cyVal VT_CY
CY FAR* pcyVal VT_BYREF|VT_CY
DATE date VT_DATE
DATE FAR* pdate VT_BYREF|VT_DATE
BSTR bstrVal VT_BSTR
BSTR FAR* pbstrVal VT_BYREF|VT_BSTR
IUnknown FAR* punkVal VT_UNKNOWN
IUnknown FAR* FAR* ppunkVal VT_BYREF|VT_UNKNOWN
IDispatch FAR* pdispVal VT_DISPATCH
IDispatch FAR* FAR* ppdispVal VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* parray VT_ARRAY|*
SAFEARRAY FAR* FAR* pparray VT_ARRAY|*
char cVal VT_I1
char FAR* pcVal VT_BYREF|VT_I1
unsigned char bVal VT_UI1
unsigned char FAR* pbVal VT_BYREF|VT_UI1
short iVal VT_I2
short FAR* piVal VT_BYREF|VT_I2
unsigned short uiVal VT_UI2
unsigned short FAR* puiVal VT_BYREF|VT_UI2
long lVal VT_I4
long FAR* plVal VT_BYREF|VT_I4
unsigned long ulVal VT_UI4
unsigned long FAR* pulVal VT_BYREF|VT_UI4
int intVal VT_INT
int FAR* pintVal VT_BYREF|VT_INT
unsigned int uintVal VT_UINT
unsigned int FAR* puintVal VT_BYREF|VT_UINT
float fltVal VT_R4
float FAR* pfltVal VT_BYREF|VT_R4
double dblVal VT_R8
double FAR* pdblVal VT_BYREF|VT_R8
Use VARIANTARG to describe arguments passed within DISPPARAMS, and VARIANT to specify variant data that cannot be passed by reference. When a variant refers to another variant by using the VT_VARIANT | VT_BYREF vartype, the variant being referred to cannot also be of type VT_VARIANT | VT_BYREF. VARIANTs can be passed by value, even if VARIANTARGs cannot. 下面又有:
typedef struct FARSTRUCT tagVARIANT VARIANT;
typedef struct FARSTRUCT tagVARIANT VARIANTARG;
把我也弄糊涂了。不过我一般只用_variant_t,比较简单。另外,我在OAIDL.H看到了
typedef VARIANT VARIANTARG;(其实和MSDN里的解释也差不多)
所以,我猜测VARIANTARG只是一个别名,表达一个含义,实际上和VARIANT是一样的。