C++ VARIANT数据类型操作详解
使用VARIANT来传递参数意味着非强类型语言(例如VBScript)能够调用使用强类型语言(C++)实现的方法。
VARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
VARIANT 数据类型在文件OAIDL.IDL中定义如下:
- 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。
使用char指针时 需要分配空间
VARIANT var;
char achValue[2048] = {0};
var.pcVal = achValue;
string strTest= var1.pcVal;
C++ VARIANT数据类型操作详解相关推荐
- MySQL操作之JSON数据类型操作详解
MySQL操作之JSON数据类型操作详解 这篇文章主要介绍了MySQL操作之JSON数据类型操作详解,内容较为详细,具有收藏价值,需要的朋友可以参考. 概述 mysql自5.7.8版本开始,就支持了j ...
- VC++常用数据类型及其操作详解 [
一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,cha ...
- VC++常用数据类型及其操作详解(非常经典,共同分享)
友情提示: 为了方便你更好的学习和阅读,也更好的体现尊重原创作者的劳动成果,请您直接查看转载原本链接: http://snailflying.blog.hexun.com/8219350_d.html ...
- VC++常用数据类型及其操作详解
一.VC常用数据类型列表 二.常用数据类型转化 2.1数学类型变量与字符串相互转换 2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,cha ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- java switch 值_Java switch多值匹配操作详解
这篇文章主要介绍了Java switch多值匹配操作详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 我们都知道 switch 用来走流程分支,大 ...
- python列表切片后得到剩余列表_python列表切片和嵌套列表取值操作详解
python列表切片和嵌套列表取值操作详解 给出列表切片的格式: [开头元素::步长] # 输出直到最后一个元素,(最后一个冒号和步长可以省略,下同) [开头元素:结尾元素(不含):步长] # 其中, ...
- Redis五种基本数据类型底层详解(原理篇)
Redis五种基本数据类型底层详解 详细介绍Redis用到的数据结构 简单动态字符串 SDS和C字符串的区别 总结 链表 字典 哈希表 字典 哈希算法 解决键冲突 rehash(重点) 渐进式reha ...
最新文章
- mysql 字符串大小写_Mysql 字符串类型及大小写
- CIDR地址块及其子网划分
- 【LeetCode笔记】88. 合并两个有序数组(Java、双指针)
- 第一个express app 详细步骤
- 消息中间件学习总结(15)——Apache RocketMQ 正式开源分布式事务消息
- 苹果藏在 iOS 14.3 中的新算法被发现,CSAM 检测技术再遭抗议!
- 帧中继环境下ospf的使用(点到点模式)
- 实现图片的变亮,变暗,灰白
- 在的微型计算机系统中 外设可和,微机原理第七章题库
- linux 间传输文件的几种方法scp、sftp
- java中session对象及其常用方法
- uc android 4.2,uc网盘下载10.4.2 安卓版-uc网盘手机版西西软件下载
- c语言 格式化硬盘,在Windows 7上用c ++格式化硬盘(Formatting a hard disk in c++ on Windows 7)...
- Matlab/Simulink仿真问题及技巧汇总【持续更新】
- 人间炼狱,人性在哪儿---------------- 二十年穿铁衣取胆,母熊含泪杀子并自杀
- 2021高考昆山中学成绩查询,高考成绩查询即将开始!昆山这几所高中本科率惊人…...
- 电脑如何安装python
- 迈向个性化精准医疗的一大飞跃:特种酶复制DNA新细节揭示
- C语言求整数的和与均值
- ubuntu设置网卡默认启动_Ubuntu18.04 配置网卡上网
热门文章
- 冲激函数与卷积的多次邂逅
- 阿里云OCR本地图片文字识别
- 深度揭秘Xshell后门事件:入侵感染供应链软件的大规模定向攻击
- 私域流量暗战,品牌如何主宰下半场?
- PAMTRI:用于车辆重新识别的姿势感知多任务学习
- 基于STM32采集CO2(MH-Z19C)传感器数据
- 让卫浴间四季花香 最懂你的智能马桶 ——安华智能坐便器aB13017-1众测报告
- python下载某网站收费文档(一)——配合fiddler半自动版
- linux 获取优盘设备序列号变为小写再用MD5加密
- lisp一键室内标注_[AutoCAD][AutoLisp]根据图框自动匹配标注比例、文字大小、线性比例等信息 | 古意人...