




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_variant_t与其他数据类型的转换 我们先看看COM所支持的一些类型的基本类:(微软提供,在comdef.h中定义)在COM中使用的标准类Class如下所示:_bstr_t:对BSTR类型进行打包,并提供有用的操作和方法;_com_error:定义抛出的error对象;_com_ptr_t:封装COM接口指针_variant_t:对VARIANT类型进行打包,并提供有用的操作和方法;一、_variant_t类的简单介绍:_variant_t对象封装了VARIANT数据类型。The class manages resource allocation and deallocation and makes function calls to VariantInit and VariantClear as appropriate.(1) _variant类提供的方法:1 构造函数_variant_t对_variant_t变量初始化调用的是_variant_t的构造函数。我们一般习惯于用一个int型的变量对数字类的变量进行初始化,这对_variant_t变量是不允许的。原因很简单,_variant_t 的构造函数中没有用整型( Int )对其初始化的构造函数可先将整型转化成long,然后再对其进行初始化2 Attach()Attaches a VARIANT object into the _variant_t object.3 Clear()Clears the encapsulated VARIANT object.4 ChangeTypeChanges the type of the _variant_t object to the indicated VARTYPE.5 DetachDetaches the encapsulated VARIANT object from this _variant_t object.6SetString将一个string赋值给_variant_t对象;7 Operators赋值操作,给现有的_variant_t对象赋一个新值;8 operator =, !=对比两个 _variant_t 对象是否相等;9 ExtractorsExtract data from the encapsulated VARIANT object.(2) _variant_t的定义:_variant_t类封闭了VARIANT数据类型,VARIANT是一个结构体类型,我们可以看一下它的定义cpp view plaincopyprint?typedefstructtagVARIANTVARTYPEvt;/存储数据类型unsignedshortwReserved1;unsignedshortwReserved2;unsignedshortwReserved3;unionBytebVal;/VT_UI1.ShortiVal;/VT_I2.longlVal;/VT_I4.floatfltVal;/VT_R4.doubledblVal;/VT_R8.VARIANT_BOOLboolVal;/VT_BOOL.SCODEscode;/VT_ERROR.CYcyVal;/VT_CY.DATEdate;/VT_DATE.BSTRbstrVal;/VT_BSTR.DECIMALFAR*pdecVal/VT_BYREF|VT_DECIMAL.IUnknownFAR*punkVal;/VT_UNKNOWN.IDispatchFAR*pdispVal;/VT_DISPATCH.SAFEARRAYFAR*parray;/VT_ARRAY|*.ByteFAR*pbVal;/VT_BYREF|VT_UI1.shortFAR*piVal;/VT_BYREF|VT_I2.longFAR*plVal;/VT_BYREF|VT_I4.floatFAR*pfltVal;/VT_BYREF|VT_R4.doubleFAR*pdblVal;/VT_BYREF|VT_R8.VARIANT_BOOLFAR*pboolVal;/VT_BYREF|VT_BOOL.SCODEFAR*pscode;/VT_BYREF|VT_ERROR.CYFAR*pcyVal;/VT_BYREF|VT_CY.DATEFAR*pdate;/VT_BYREF|VT_DATE.BSTRFAR*pbstrVal;/VT_BYREF|VT_BSTR.IUnknownFAR*FAR*ppunkVal;/VT_BYREF|VT_UNKNOWN.IDispatchFAR*FAR*ppdispVal;/VT_BYREF|VT_DISPATCH.SAFEARRAYFAR*FAR*pparray;/VT_ARRAY|*.VARIANTFAR*pvarVal;/VT_BYREF|VT_VARIANT.voidFAR*byref;/GenericByRef.charcVal;/VT_I1.unsignedshortuiVal;/VT_UI2.unsignedlongulVal;/VT_UI4.intintVal;/VT_INT.unsignedintuintVal;/VT_UINT.charFAR*pcVal;/VT_BYREF|VT_I1.unsignedshortFAR*puiVal;/VT_BYREF|VT_UI2.unsignedlongFAR*pulVal;/VT_BYREF|VT_UI4.intFAR*pintVal;/VT_BYREF|VT_INT.unsignedintFAR*puintVal;/VT_BYREF|VT_UINT.;cpp view plain copy print?typedefstructtagVARIANTVARTYPEvt;/存储数据类型 unsignedshortwReserved1;unsignedshortwReserved2;unsignedshortwReserved3;unionBytebVal;/VT_UI1. ShortiVal;/VT_I2. longlVal;/VT_I4. floatfltVal;/VT_R4. doubledblVal;/VT_R8. VARIANT_BOOLboolVal;/VT_BOOL. SCODEscode;/VT_ERROR. CYcyVal;/VT_CY. DATEdate;/VT_DATE. BSTRbstrVal;/VT_BSTR. DECIMALFAR*pdecVal/VT_BYREF|VT_DECIMAL. IUnknownFAR*punkVal;/VT_UNKNOWN. IDispatchFAR*pdispVal;/VT_DISPATCH. SAFEARRAYFAR*parray;/VT_ARRAY|*. ByteFAR*pbVal;/VT_BYREF|VT_UI1. shortFAR*piVal;/VT_BYREF|VT_I2. longFAR*plVal;/VT_BYREF|VT_I4. floatFAR*pfltVal;/VT_BYREF|VT_R4. doubleFAR*pdblVal;/VT_BYREF|VT_R8. VARIANT_BOOLFAR*pboolVal;/VT_BYREF|VT_BOOL. SCODEFAR*pscode;/VT_BYREF|VT_ERROR. CYFAR*pcyVal;/VT_BYREF|VT_CY. DATEFAR*pdate;/VT_BYREF|VT_DATE. BSTRFAR*pbstrVal;/VT_BYREF|VT_BSTR. IUnknownFAR*FAR*ppunkVal;/VT_BYREF|VT_UNKNOWN. IDispatchFAR*FAR*ppdispVal;/VT_BYREF|VT_DISPATCH. SAFEARRAYFAR*FAR*pparray;/VT_ARRAY|*. VARIANTFAR*pvarVal;/VT_BYREF|VT_VARIANT. voidFAR*byref;/GenericByRef. charcVal;/VT_I1. unsignedshortuiVal;/VT_UI2. unsignedlongulVal;/VT_UI4. intintVal;/VT_INT. unsignedintuintVal;/VT_UINT. charFAR*pcVal;/VT_BYREF|VT_I1. unsignedshortFAR*puiVal;/VT_BYREF|VT_UI2. unsignedlongFAR*pulVal;/VT_BYREF|VT_UI4. intFAR*pintVal;/VT_BYREF|VT_INT. unsignedintFAR*puintVal;/VT_BYREF|VT_UINT. ;typedef struct tagVARIANT VARTYPE vt;/存储数据类型unsigned short wReserved1;unsigned short wReserved2;unsigned short wReserved3;union Byte 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.DECIMAL FAR* pdecVal/ VT_BYREF|VT_DECIMAL.IUnknown FAR* punkVal;/ VT_UNKNOWN.IDispatch FAR* pdispVal;/ VT_DISPATCH.SAFEARRAY FAR* parray;/ VT_ARRAY|*.Byte 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.char cVal;/ VT_I1.unsigned short uiVal;/ VT_UI2.unsigned long ulVal;/ VT_UI4.int intVal;/ VT_INT.unsigned int uintVal;/ VT_UINT.char FAR * pcVal;/ VT_BYREF|VT_I1.unsigned short FAR * puiVal;/ VT_BYREF|VT_UI2.unsigned long FAR * pulVal;/ VT_BYREF|VT_UI4.int FAR * pintVal;/ VT_BYREF|VT_INT.unsigned int FAR * puintVal;/VT_BYREF|VT_UINT.;注意:vt用来存储内部变量(联合体中保存的变量)的类型,联合体用来存储对应类型的值二、数据类型转换_bstr_t类可以作为_variant_t类与基本数据类型转换的中介(1) _variant_t与CString之间的转化1 CString转换为_variant_t:cpp view plaincopyprint?CStringstr;_variant_tstr1=(LPCTSTR)str;cpp view plain copy print?CStringstr;_variant_tstr1=(LPCTSTR)str;CString str;_variant_t str1=(LPCTSTR)str; 使用_variant_t的成员函数SetString来对_variant_t的对象赋值会更好;2 _variant_t转换为CString:cpp view plaincopyprint?_variant_tvt;CStringtempstr=(LPCSTR)_bstr_t(vt);/_bstr_t的构造函数有对_variant_t类型的处理cpp view plain copy print?_variant_tvt;CStringtempstr=(LPCSTR)_bstr_t(vt);/_bstr_t的构造函数有对_variant_t类型的处理_variant_t vt;CString tempstr=(LPCSTR)_bstr_t(vt); /_bstr_t的构造函数有对_variant_t类型的处理(2) _variant_t与char *之间的转换1 char * 转换为_variant_t方法与CString转换为_variant_t的方法类似:cpp view plaincopyprint?char*cValue;_variant_tvValue=(LPSTR)cValue;cpp view plain copy print?char*cValue;_variant_tvValue=(LPSTR)cValue;char * cValue;_variant_t vValue=(LPSTR)cValue;2 _variant_t转换为char *: 错误方法:cpp view plaincopyprint?_variant_tvValue;char*value=(LPSTR)(LPCSTR)_bstr_t(vValue)cpp view plain copy print?_variant_tvValue;char*value=(LPSTR)(LPCSTR)_bstr_t(vValue)_variant_t vValue;char * value=(LPSTR)(LPCSTR)_bstr_t(vValue)value指向一堆乱码.原因:不能用char *直接指向(LPSTR)(LPCSTR)_bstr_t( _variant_t ),因为这样转换之后实际上是一个string,而非一个char *正确方法:进行转换时,只能用strcpy(),将LPSTR指向的字符复制到char * 所指向的内存中;如下例:cpp view plaincopyprint?_variant_tvValue;charcValue16=0;strcpy(cValue,(LPCSTR)_bstr_t(vValue);cpp view plain copy print?_variant_tvValue;charcValue16=0;strcpy(cValue,(LPCSTR)_bstr_t(vValue);_variant_t vValue;char cValue1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西安翻译学院《生物统计学5》2023-2024学年第二学期期末试卷
- 河北建材职业技术学院《政治学原理》2023-2024学年第二学期期末试卷
- 第4章 机械能及其守恒定律 分层作业-动能 动能定理 粤教版高中物理必修第二册同步练习题(含解析)
- 自助式饺子馆企业制定与实施新质生产力项目商业计划书
- JavaWeb应用程序开发教程(任务驱动式) 教案全套 模块1-10 -基于JSP指令和标签的Web程序开发 -基于Spring Boot的Web应用程序开发
- 音乐MV拍摄工作室行业跨境出海项目商业计划书
- 共享办公区域企业制定与实施新质生产力项目商业计划书
- 绿色建筑节能与环保旅馆企业制定与实施新质生产力项目商业计划书
- 健身教练频道企业制定与实施新质生产力项目商业计划书
- 书法挂轴创新创业项目商业计划书
- 【MOOC】测量学-西北农林科技大学 中国大学慕课MOOC答案
- 【MOOC】线性代数及其应用-天津大学 中国大学慕课MOOC答案
- 酒店餐饮设备电路布线合同
- 12岁体适能课程设计
- 国开2024年秋《学前儿童艺术教育音乐》终结性考核答案
- 外贸英语函电教程 第二版 课件Unit 1 Establishing Business Relations;Unit 2 Inquiries and Offers
- 供应柴油月结算合同范本
- 2024年中考语文试题分类汇编:字音字形(解析版全国)
- GB/T 30893-2024雨生红球藻粉
- 2024年《风力发电原理》基础技能及理论知识考试题库与答案
- 2024秋国家开放大学《外国文学》形考任务1-4答案
评论
0/150
提交评论