VARIANT 数据类型
VARIANT 数据类型在文件OAIDL.IDL中定义如下:
【vc中数据类型,对应类为_variant_t】
struct tagVARIANT {
union {
struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union {
ULONGLONG ullVal; /* VT_UI8 */
LONGLONG llVal; /* VT_I8 */
LONG lVal; /* VT_I4 */
BYTE bVal; /* VT_UI1 */
SHORT iVal; /* VT_I2 */
FLOAT fltVal; /* VT_R4 */
DOUBLE dblVal; /* VT_R8 */
VARIANT_BOOL boolVal; /* VT_BOOL */
_VARIANT_BOOL bool; /* (obsolete) */
SCODE scode; /* VT_ERROR */
CY cyVal; /* VT_CY */
DATE date; /* VT_DATE */
BSTR bstrVal; /* VT_BSTR */
IUnknown * punkVal; /* VT_UNKNOWN */
IDispatch * pdispVal; /* VT_DISPATCH */
SAFEARRAY * parray; /* VT_ARRAY */
BYTE * pbVal; /* VT_BYREF|VT_UI1 */
SHORT * piVal; /* VT_BYREF|VT_I2 */
LONG * plVal; /* VT_BYREF|VT_I4 */
LONGLONG * pllVal; /* VT_BYREF|VT_I8 */
FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
_VARIANT_BOOL *pbool; /* (obsolete) */
SCODE * pscode; /* VT_BYREF|VT_ERROR */
CY * pcyVal; /* VT_BYREF|VT_CY */
DATE * pdate; /* VT_BYREF|VT_DATE */
BSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */
IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */
SAFEARRAY ** pparray; /* VT_BYREF|VT_ARRAY */
VARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */
PVOID byref; /* Generic ByRef */
CHAR cVal; /* VT_I1 */
USHORT uiVal; /* VT_UI2 */
ULONG ulVal; /* VT_UI4 */
INT intVal; /* VT_INT */
UINT uintVal; /* VT_UINT */
DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */
CHAR * pcVal; /* VT_BYREF|VT_I1 */
USHORT * puiVal; /* VT_BYREF|VT_UI2 */
ULONG * pulVal; /* VT_BYREF|VT_UI4 */
ULONGLONG * pullVal; /* VT_BYREF|VT_UI8 */
INT * pintVal; /* VT_BYREF|VT_INT */
UINT * puintVal; /* VT_BYREF|VT_UINT */
struct __tagBRECORD {
PVOID pvRecord;
IRecordInfo * pRecInfo;
} __VARIANT_NAME_4; /* VT_RECORD */
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
};
VARIANT数据结构包含两个域(如果不考虑保留的域)。vt域描述了第二个域的数据类型。为了使多种类型能够在第二个域中出现,我们定义了一个联合结构。所以,第二个域的名称随着vt域中输入值的不同而改变。用于指定vt域值情况的常量在联合的定义中以每一行的注释形式给出。
使用VARIANT和VARIANTARG数据结构要分两步完全。举一个例子,让我们考虑如下代码:
long lValue = 999;
VARIANT vParam;
vParam.vt = VT_I4;
vParam.lVal = lValue;
在第一行中指定数据类型。常量VT_I4表明在第二个域中将出现一个long型的数据。根据类型VARIANT的定义,可以得知,当一个long型数据存入VARIANT类型时,其第二个域使用的名称是lVal。
使用VARIANT来传递参数意味着非强类型语言(例如VBScript)能够调用使用强类型语言(C++)实现的方法。Invoke()方法的实现可以检查参数VARIANT封装的数值是否符合其正确的数据类型。如果符合,该类型将取出,并传递给调用方法。否则,Invoke()方法能够尝试使用 VariantChangeType()API函数来将该数值转换成正确的类型。
本文将介绍一些常用数据类型的使用。 我们先定义一些常见类型变量借以说明 int i = 100; 一、其它数据类型转换为字符串 短整型(int) 二、从其它包含字符串的变量中获取指向该字符串的指针 CString变量 三、字符串转换为其它数据类型 短整型(int) 四、其它数据类型转换到CString 整数(int) 五、BSTR、_bstr_t与CComBSTR CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。 六、VARIANT 、_variant_t 与 COleVariant VARIANT的结构可以参考头文件VC98/Include/OAIDL.H中关于结构体tagVARIANT的定义。 对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系: |
VARIANT 数据类型相关推荐
- Variant 数据类型介绍
Variant 数据类型是所有没被显式声明(用如 Dim.Private.Public 或 Static等语句)为其他类型变量的数据类型.Variant 数据类型并没有类型声明字符. Variant ...
- VARIANT 数据类型简单介绍
VIRIANT是ACTIVEX AUTOMATION需要用到的一种变量类型,可以称之为通用数据类型,其实它是一个结构.如果仅仅是调用ACTIVEX对象所提供的METHOD不需知道其中的细节.它仅用于通 ...
- VARIANT数据类型详解
VARIANT 数据类型在文件OAIDL.IDL中定义如下: struct tagVARIANT { union { struct __tagVARIANT { ...
- C++ VARIANT数据类型操作详解
使用VARIANT来传递参数意味着非强类型语言(例如VBScript)能够调用使用强类型语言(C++)实现的方法. VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构 ...
- Variant数据类型
Variant 数据类型是所有没被显式声明(用如 Dim.Private.Public 或 Static等语句)为其他类型变量的数据类型.Variant 数据类型并没有类型声明字符. Variant ...
- jdbc执行sql 不支持“variant”数据类型。
把查询出来的列转换下类型 select cast(a as varchar(500)) from b cast( as varchar(500)) 转载于:https://www.cnblogs.co ...
- variant php,Variant 是什么数据类型?
Variant 是什么数据类型? Variant是一种特殊的数据类型,该类型是没有类型声明字符,作用是能够在运行期间动态的改变类型,并且支持所有简单的数据类型,如整型.浮点.字符串.布尔型.日期时间. ...
- VC----各种数据类型VARIANT、COleVariant 、_variant_t
VARIANT.COleVariant 和_variant_t 在OLE.ActiveX和COM中,VARIANT数据类型提供了一种非常有效的机制,由于它既包含了数据本身,也包含了数据的类型,因而它可 ...
- C++变体数据类型—— VARIANT
百度百科: Variant 音标 Phonetic symbol [] 词性及解释 Part of speech and defination n. 变体, 异体 a. 不同的, 有差别的 [计] 变 ...
最新文章
- 双圆弧插值算法(二)
- 配置多路由的静态路由
- php 跳转网页 变量,php变量与JS变量实现不通过跳转直接交互的方法
- 深度学习——RNN原理与TensorFlow2下的IMDB简单实践
- nginx+tomcat8+memcached实现session共享具体操作
- IOS 开发 UIProgress 和 UISlidre 进度条和滑动条组件
- 台风路径超级计算机,厄尔尼诺又要来了?2号台风或要生成,超级计算机:路径争议大...
- 不打游戏还整个i7 8700的弊端,完全用不上
- 【报告分享】中国电信5G行业场景案例集.pdf(附下载链接)
- RedHat Linux下Samba配置(简单配置)-转
- win7如何设置通电自动开机_WIN7旗舰版在BIOS界面下如何设置自动开机?
- 【转载】微信公众平台发展趋势猜想
- 新手提问!求解答QAQADODB.Recordset 错误 #x27;800a0bb9#x27; 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- 计算机数字顺序怎么带公式,Excel函数公式:6个数据排序技巧,总有一个适合你!...
- 饼图指北(Pie Chart)
- ROS学习笔记之小乌龟跟随
- visual assist x太卡了_带你纵横职场的高阶EVO笔记本 华硕灵耀X纵横评测
- 第一个模板类(templetclass elemType class xxxxx)
- 国内十大活跃报表 BI 产品深度点评
- ### Cause: java.sql.SQLSyntaxErrorException: Column ‘update_time‘ specified twice
热门文章
- R语言 批量导入数据
- manchi翻译中文 mi_女生发Mimanchi是什么意思,mi manchi翻译中文是我想你
- Mybatis Generator配置文件完整配置详解
- DNS服务器上门维修电话,全国DNS服务器地址列举
- 2021宁夏高考的会考成绩查询,【宁夏成人高考成绩查询时间_2021年成人高考成绩查询】- 环球网校...
- cellspacing和cellpadding的区别
- ios 图片像素点取颜色,判断颜色是否为亮色,颜色对比
- 软件测试需要学习什么 一文告诉你,软测内容需要学这些
- P3628 [APIO2010]特别行动队(斜率优化DP)
- sublime text 3 - win10输入法输入框不跟随问题解决