首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC VARIANT转换有关问题

2012-05-03 
VC VARIANT转换问题请教如何将VARIANT类型转换为CString[]字符串数组[解决办法]http://www.diybl.com/cour

VC VARIANT转换问题
请教如何将VARIANT类型转换为CString[]字符串数组


[解决办法]
http://www.diybl.com/course/3_program/c++/cppjs/200861/118719.html
VARIANT 类型经常用来给 COM 对象传递参数,或者接收从 COM 对象返回的值。你也能自己编写返回 VARIANT 类型的方法,函数返回什么类型依赖可能(并且常常)方法的输入参数(比如,在自动化操作中,依赖与你调用哪个方法。IDispatch::Invoke 可能返回(通过其一个参数)一个 包含有BYTE、WORD、float、double、date、BSTR 等等 VARIANT 类型的结果,(详见 MSDN 上的 VARIANT 结构的定义)。在下面的例子中,假设 类型是一个BSTR的变体,也就是说在串中的值是通过 bsrtVal 来引用,其优点是在 ANSI 应用中,有一个构造函数会把 LPCWCHAR 引用的值转换为一个 CString(见 BSTR-to-CString 部分)。在 Unicode 模式中,将成为标准的 CString 构造函数,参见对缺省::WideCharToMultiByte 转换的告诫,以及你觉得是否可以接受(大多数情况下,你会满意的)。

VARIANT vaData;vaData = m_com.YourMethodHere();ASSERT(vaData.vt == VT_BSTR);CString strData(vaData.bstrVal);
你还可以根据 vt 域的不同来建立更通用的转换例程。为此你可能会考虑:


CString VariantToString(VARIANT * va){ CString s; switch(va->vt) { /* vt */ case VT_BSTR: return CString(vaData->bstrVal); case VT_BSTR | VT_BYREF: return CString(*vaData->pbstrVal); case VT_I4: s.Format(_T(\"%d\"), va->lVal); return s; case VT_I4 | VT_BYREF: s.Format(_T(\"%d\"), *va->plVal); case VT_R8: s.Format(_T(\"%f\"), va->dblVal); return s; ... 剩下的类型转换由读者自己完成 default: ASSERT(FALSE); // unknown VARIANT type (this ASSERT is optional) return CString(\"\"); } /* vt */}

文章出处:http://www.diybl.com/course/3_program/c++/cppjs/200861/118719.html
[解决办法]
如果确定得到的VARIANT 是字符串
可以先转换成
_bstr_t类型
使用起来就方便多了

热点排行
Bad Request.