关于MFC的一个小小问题 简单讲就是怎么将一个VARIANT变量转换成为字符串变量并且存放到一个char AA[100]里面去。我用的是VC6.0。 详细:我在用OLE操作Excel,现在使用GetItem 从Excel里面单元格获取数据。得到的返回值是一个VARIANT变量,虽然我不清楚这是一个怎样的变量。但是这不是我考虑的,我想要的是把变量里的值当字符串存放到我指定的字符串数组里面去。 求解答,或者给个具体的解决例子参考。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VARIANT var;var.pcVal就是char*类型的数据。 VARIANT vt;strncpy(AA ,(char *)(_bstr_t)vt.bstrVal,100);//强制转换 资料来源:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8885.html六、VARIANT C++、BASIC、Java、Pascal、Script......计算机语言多种多样,而它们各自又都有自己的数据类型,COM 产生目的,其中之一就是要跨语言(注3)。而 VARIANT 数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。从C语言的角度来讲,VARIANT 其实是一个结构,结构中用一个域(vt)表示------该变量到底表示的是什么类型数据,同时真正的数据则存贮在 union 空间中。结构的定义太长了(虽然长,但其实很简单)大家去看 MSDN 的描述吧,这里给出如何使用的简单示例:学生:我想用 VARIANT 表示一个4字节长的整数,如何做?老师:VARIANT v; v.vt=VT_I4; v.lVal=100;学生:我想用 VARIANT 表示布尔值“真”,如何做?老师:VARIANT v; v.vt=VT_BOOL; v.boolVal=VARIANT_TRUE;学生:这么麻烦?我能不能 v.boolVal=true; 这样写?老师:不可以!因为 类型 字节长度 假值 真值bool 1(char) 0(false) 1(true)BOOL 4(int) 0(FALSE) 1(TRUE)VT_BOOL 2(short int) 0(VARIANT_FALSE) -1(VARIANT_TRUE) 所以如果你 v.boolVal=true 这样赋值,那么将来 if(VARIANT_TRUE==v.boolVal) 的时候会出问题(-1 != 1)。但是你注意观察,任何布尔类型的“假”都是0,因此作为一个好习惯,在做布尔判断的时候,不要和“真值”相比较,而要与“假值”做比较。学生:谢谢老师,你太牛了。我对老师的敬仰如滔滔江水,连绵不绝......学生:我想用 VARIANT 保存字符串,如何做?老师:VARIANT v; v.vt=VT_BSTR; v.bstrVal=SysAllocString(L"Hello,你好");学生:哦......我明白了。可是这么操作真够麻烦的,有没有简单一些的方法?老师:有呀,你可以使用现成的包装类 CComVariant、COleVariant、_variant_t。比如上面三个问题就可以这样书写:CComVariant v1(100),v2(true),v3("Hello,你好"); 简单了吧?!(注4)学生:老师,我再问最后一个问题,我如何用 VARIANT 保存一个数组?老师:这个问题很复杂,我现在不能告诉你,我现在告诉你怕你印象不深......(注5)学生:~!@#$%^&*()......晕! 最后还得我自己来提供一个确实的解决办法:CString str_xlsToOther="";str_xlsToOther= (LPCTSTR)(_bstr_t)VA_A_Buffer; //VA_A_Buffer是VARIANT变量。 使用VC如何关闭UAC,并且不用重新启动电脑 CTabCtrl控件标签页能否在上下同时显示? 菜鸟提问 请问哪里有串口通信的例程? 一个VC中的小问题? 问一个关于3D演示动画的问题 想问一下各位所在公司用的是什么杀毒软件!主要是用在公司上网这个用途上。 求教大神OD附加程序后ALT+M得到的内存视图是怎么实现的?使用的函数式哪个? MFC ribbon如何隐藏和显示指定的pane或者element Debug的问题 the thread has exited with code CSDN管理员列表 如何上移下移listbox里的一行数据
var.pcVal就是char*类型的数据。
strncpy(AA ,(char *)(_bstr_t)vt.bstrVal,100);//强制转换
C++、BASIC、Java、Pascal、Script......计算机语言多种多样,而它们各自又都有自己的数据类型,COM 产生目的,其中之一就是要跨语言(注3)。而 VARIANT 数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。从C语言的角度来讲,VARIANT 其实是一个结构,结构中用一个域(vt)表示------该变量到底表示的是什么类型数据,同时真正的数据则存贮在 union 空间中。结构的定义太长了(虽然长,但其实很简单)大家去看 MSDN 的描述吧,这里给出如何使用的简单示例:学生:我想用 VARIANT 表示一个4字节长的整数,如何做?
老师:VARIANT v; v.vt=VT_I4; v.lVal=100;学生:我想用 VARIANT 表示布尔值“真”,如何做?
老师:VARIANT v; v.vt=VT_BOOL; v.boolVal=VARIANT_TRUE;
学生:这么麻烦?我能不能 v.boolVal=true; 这样写?
老师:不可以!因为
类型 字节长度 假值 真值
bool 1(char) 0(false) 1(true)
BOOL 4(int) 0(FALSE) 1(TRUE)
VT_BOOL 2(short int) 0(VARIANT_FALSE) -1(VARIANT_TRUE)
所以如果你 v.boolVal=true 这样赋值,那么将来 if(VARIANT_TRUE==v.boolVal) 的时候会出问题(-1 != 1)。但是你注意观察,任何布尔类型的“假”都是0,因此作为一个好习惯,在做布尔判断的时候,不要和“真值”相比较,而要与“假值”做比较。
学生:谢谢老师,你太牛了。我对老师的敬仰如滔滔江水,连绵不绝......学生:我想用 VARIANT 保存字符串,如何做?
老师:VARIANT v; v.vt=VT_BSTR; v.bstrVal=SysAllocString(L"Hello,你好");学生:哦......我明白了。可是这么操作真够麻烦的,有没有简单一些的方法?
老师:有呀,你可以使用现成的包装类 CComVariant、COleVariant、_variant_t。比如上面三个问题就可以这样书写:CComVariant v1(100),v2(true),v3("Hello,你好"); 简单了吧?!(注4)学生:老师,我再问最后一个问题,我如何用 VARIANT 保存一个数组?
老师:这个问题很复杂,我现在不能告诉你,我现在告诉你怕你印象不深......(注5)
学生:~!@#$%^&*()......晕!
CString str_xlsToOther="";
str_xlsToOther= (LPCTSTR)(_bstr_t)VA_A_Buffer; //VA_A_Buffer是VARIANT变量。