字符串转换系列三:VARIANT、COleVariant 和_variant_t
来源:互联网 发布:在淘宝网上开什么店好 编辑:程序博客网 时间:2024/05/04 23:22
在OLE、ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版:struct tagVARIANT {
VARTYPE vt;
union {
short iVal; // VT_I2.
long lVal; // VT_I4.
float fltVal; // VT_R4.
double dblVal; // VT_R8.
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
…
short * piVal; // VT_BYREF|VT_I2.
long * plVal; // VT_BYREF|VT_I4.
float * pfltVal; // VT_BYREF|VT_R4.
double * pdblVal; // VT_BYREF|VT_R8.
DATE * pdate; // VT_BYREF|VT_DATE.
BSTR * pbstrVal; // VT_BYREF|VT_BSTR.
};
};
显然,VARIANT类型是一个C结构,它包含了一个类型成员vt、一些保留字节以及一个大的union类型。例如,如果vt为VT_I2,那么我们可以从iVal中读出VARIANT的值。同样,当给一个VARIANT变量赋值时,也要先指明其类型。例如:
VARIANT va;
:: VariantInit(&va); // 初始化
int a = 2002;
va.vt = VT_I4; // 指明long数据类型
va.lVal = a; // 赋值
为了方便处理VARIANT类型的变量,Windows还提供了这样一些非常有用的函数:
VariantInit —— 将变量初始化为VT_EMPTY;
VariantClear —— 消除并初始化VARIANT;
VariantChangeType —— 改变VARIANT的类型;
VariantCopy —— 释放与目标VARIANT相连的内存并复制源VARIANT。
COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大大的功能,当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。除此之外,COleVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。例如下面的代码:
COleVariant v1("This is a test"); // 直接构造
COleVariant v2 = "This is a test";
// 结果是VT_BSTR类型,值为"This is a test"
COleVariant v3((long)2002);
COleVariant v4 = (long)2002;
// 结果是VT_I4类型,值为2002
_variant_t是一个用于COM的VARIANT类,它的功能与COleVariant相似。不过在Visual C++.NET的MFC应用程序中使用时需要在代码文件前面添加下列两句:
#include "comutil.h"
#pragma comment( lib, "comsupp.lib" )
0 0
- 字符串转换系列三:VARIANT、COleVariant 和_variant_t
- 字符串转换系列三:VARIANT、COleVariant 和_variant_t
- 字符串转换系列三:VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- VARIANT、COleVariant 和_variant_t
- 转帖:VARIANT、COleVariant 和_variant_t
- VARIANT、_variant_t 与 COleVariant 相互转换
- COleVariant和VARIANT转换为CString类型
- VC----各种数据类型VARIANT、COleVariant 、_variant_t
- wchar_t,char,string,CString,BSTR,CComBSTR,_bstr_t,VARIANT 、_variant_t 与 COleVariant相互转换
- VARIANT、COleVariant 和_variant_
- BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t
- BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t
- hive 基本语法
- nano编辑器
- weblogic中优先加载应用中的jar包 prefer-application-packages
- 谷歌浏览器的一个新特点
- 使用jquery/js获取iframe父子级、同级获取元素
- 字符串转换系列三:VARIANT、COleVariant 和_variant_t
- android 4.3源码下载
- TcpServer类介绍[4-2]
- 《大话设计模式》—— 读后感(16)无尽加班何时休息——状态模式
- 猎人做了论功行赏的决定.
- 今天开始写博客了,整理整理自己这段时间学的东西
- 前端工程师,要走的路
- POJ 1141 Brackets Sequence 区间dp
- Android自定义进度条