编程中需要将_variant_t转换为char*,常用的方法是:(const char*)_bstr_t(c_variant_t);

  使用_bstr_t的构造函数:  _bstr_t(const _variant_t& var) ;

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
// Construct a _bstr_t from a const _variant_t&
//
inline _bstr_t::_bstr_t(const _variant_t &var) 
    : m_Data(NULL)
{
    if (V_VT(&var) == VT_BSTR) {
        *this = V_BSTR(&var);
        return;
    }

_variant_t varDest;
    varDest.ChangeType(VT_BSTR, &var);

*this = V_BSTR(&varDest);
}

  但是在转换小于1(如0.02)的float、double类型时会造成整数部分的0丢失的问题,详细的代码以及可行解决方案如下:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
/********************************************************************
    created:    2018/07/20 20:7:2018   15:21
    file base:  _bstr_t
    file ext:   cpp
    author:     Michael Joessy
    
    purpose:    _bstr_t
*********************************************************************/
#include <iostream>
#include <string>
#include <comutil.h>

using namespace std;

#pragma comment(lib, "comsupp.lib")

int main()
{
    ];

_variant_t _varR4;
    _varR4.vt = VT_R4;
    _varR4.fltVal = ;
    cout << "转换前:\t" << _varR4.fltVal << endl;
    _bstr_t _bstr4 = _bstr_t(_varR4);
    wcout << "转换后:\t" << (wchar_t*)_bstr4 << endl;          //丢失整数部分的0
);
    sprintf(szStr, "%10.6f", (double)_varR4.fltVal);
    cout << "转换Ex:\t" << szStr << endl;

_variant_t _varR8;
    _varR8.vt = VT_R8;
    _varR8.dblVal = ;
    cout << "转换前:\t" << _varR8.dblVal << endl;
    _bstr_t _bstr8 = _bstr_t(_varR8);
    wcout << "转换后:\t" << (wchar_t*)_bstr8 << endl;          //丢失整数部分的0
);
    sprintf(szStr, "%10.6f", _varR8.dblVal);
    cout << "转换Ex:\t" << szStr << endl;

// 等待键盘输入...
    cin.get();
    ;
}

关于使用_bstr_t的一个坑的更多相关文章

  1. 用html5的视频元素所遇到的第一个坑

    html5 有一个video标签,这个是被大家所熟知的事情.按照w3c的规范,我认真的写出如下代码: <video preload="auto" controls=" ...

  2. 监控jvm的一个坑

    监控jvm的一个坑 1,遇到的问题 我按照以往文档,在catalina.sh里追加jvm的监控api,如下 紧接着我启动 tomcat. 未报任何错误. 发现 lsof –i:12000, 12000 ...

  3. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  4. PHP中逻辑运算符and/or与||/&&的一个坑

    我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1  ...

  5. 困扰多日的C#调用Haskell问题竟然是Windows的一个坑

    最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...

  6. 在VS2012中GridView的一个坑

    使用GridView的时候遇到了一个坑,一个增加一个选择按钮~貌似在某些情况下会出现一个是否允许选择的属性,貌似会默认为fals,然后就返回不了指定ID!坑,巨坑!但是今天居然找不到这个属性了,难道是 ...

  7. 【转载】linux命令行计算器bc的一个“坑”

    [转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...

  8. 使用ffmpeg视频编码过程中踩的一个坑

           今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果:                   ...

  9. Jquery-全选和取消的一个坑

    在做一个商城的购物车的时候遇到了一个坑, 购物车一般都有全选按钮, 再次点击就会全部消除, 在网上查到的答案全部都是使用attr来做的, 无一例外都不能用, 之后才知道要使用jquery的prop和r ...

随机推荐

  1. jQuery-File-Upload文件上传

    http://blueimp.github.io/jQuery-File-Upload/index.html

  2. 替换python字典中的key值

  3. java中常用的类,包,接口

    类 StringIntegerLong File DateThread(java.lang.ThreadThread类的定义:public class Thread extends Object im ...

  4. Head First 设计模式读书笔记(1)-策略模式

    一.策略模式的定义 策略模式定义了算法族,分别封装起来,让它们之间可以互换替换,此模式让算法的变化独立使用算法的客户. 二.使用策略模式的一个例子 2.1引出问题 某公司做了一套模拟鸭子的游戏:该游戏 ...

  5. C++ for fun & test

    #include <iostream> using namespace std; class DaYe { public: const DaYe & gege() const { ...

  6. JavaScrip——练习(做悬浮框再进一步:悬浮窗后缀悬浮窗——用this.className)

    对悬浮窗进一步改进: 用this.className 可以省略script <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio ...

  7. java后台json如何传递到jsp中解析

    需求:  系统前端jsp使用的是easyUi的datagrid展示了一些任务信息,任务信息中有个状态信息显示的值是数字, 需要根据后台保存的映射关系,将状态显示为描述信息. 原来的jsp前端显示: 解 ...

  8. Nginx_lua缓存问题,关闭lua_code_cache

    打开nginx.conf配置server{ lua_code_cache off; //关闭lua缓存 重启后生效 server_name localhost; default_type 'text/ ...

  9. 安装版的tomcat微信支付时报2字节的UTF-8序列的字节2无效

  10. 关于Unity的入门游戏飞机大战的开发(上)

    每个组件都是一个类的实例,要获得某个组件,要先创建一个同类型的组件类实例,然后把实例传引用过去,就可以对想要的组件实例进行操作. 做游戏一般创建一个逻辑节点,里面只管逻辑,再创建一个动画节点,里面有好 ...