社区
C++ 语言
帖子详情
VC VARIANT转换问题
xhs_lh04
2009-03-20 11:36:15
请教如何将VARIANT类型转换为CString[]字符串数组
...全文
802
8
打赏
收藏
VC VARIANT转换问题
请教如何将VARIANT类型转换为CString[]字符串数组
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wangbin_CSDN
2012-05-02
打赏
举报
回复
恩,看来受益非浅啊
xhs_lh04
2009-03-20
打赏
举报
回复
嗯感谢楼上的
COM返回的是3维字符串数组,我如何解析得到数据?
猫已经找不回了
2009-03-20
打赏
举报
回复
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
xhs_lh04
2009-03-20
打赏
举报
回复
嗯COM返回的是VARIANT类型,要解析出里面的返回数据
downmooner
2009-03-20
打赏
举报
回复
CString[]?
chin_chen_again
2009-03-20
打赏
举报
回复
硕大一个结构体,要转化为字符串?
typedef struct tagVARIANT {
VARTYPE vt;
unsigned short wReserved1;
unsigned short wReserved2;
unsigned short wReserved3;
union {
unsigned char 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.
IUnknown FAR* punkVal; // VT_UNKNOWN.
IDispatch FAR* pdispVal; // VT_DISPATCH.
SAFEARRAY FAR* parray; // VT_ARRAY|*.
unsigned char 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.
};
};
我编人生不编程
2009-03-20
打赏
举报
回复
如果确定得到的VARIANT 是字符串
可以先转换成
_bstr_t类型
使用起来就方便多了
xhs_lh04
2009-03-20
打赏
举报
回复
嗯已解决
vc
Variant
类型
转换
成CString函数
一个
Variant
类型
转换
成CString的函数,调试过,可以用。
VC
数据类型
转换
详解
VC
数据类型
转换
详解
VC
数据类型
转换
详解
VC
数据类型
转换
详解
VC
常用数据类型使用
转换
详解
VC
常用数据类型使用
转换
详解,
VC
常用数据类型使用
转换
详解
VC
中BSTR、Char和CString类型的
转换
VC
中BSTR、Char和CString类型的
转换
vc
数据类型
转换
网上资源加个人总结的
vc
中经常用到的数据类型
转换
概述
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章