社区
C++ 语言
帖子详情
VC VARIANT转换问题
xhs_lh04
2009-03-20 11:36:15
请教如何将VARIANT类型转换为CString[]字符串数组
...全文
809
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
(Visual C++)编程环境中,进行不同类型的数据
转换
是非常常见的需求之一。本文将深入解析几种常见的数据类型及其相互
转换
的方法,包括`CString`、`BSTR`、`LPCTSTR`等类型之间的
转换
,...
Variant
输入出参数,ocx传递byte数组,safearray使用方法,
vc
写ocx在vb下调用
本话题主要聚焦于如何在
VC
(Visual C++)中编写OCX控件,并在VB(Visual Basic)中进行调用,特别是涉及到
Variant
输入/输出参数、通过 OCX 传递字节数组以及 SafeArray 的使用方法。 1.
Variant
输入/输出参数: ...
VC
常用数据类型使用
转换
详解
在IT领域,特别是针对软件开发中的编程语言,如
VC
(Visual C++),数据类型的使用与
转换
是基础且关键的一部分。本文将深入解析
VC
中常用数据类型及其
转换
方式,旨在为开发者提供一个清晰、全面的理解框架。 ### 基础...
VC
中BSTR、Char和CString类型的
转换
###
VC
中BSTR、Char和CString类型的
转换
在
VC
(Visual C++)开发环境中,进行不同类型之间的
转换
是一项常见的任务,特别是在处理字符串时。本文将详细介绍如何在
VC
中实现BSTR、char* 和 CString 类型之间的
转换
,并...
C++ 语言
65,199
社区成员
250,520
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章