编程中需要将_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. lua内存管理

    本文内容基于版本:Lua 5.3.0 Lua内存管理器规则 Lua允许用户自定义内存管理器,并在创建Lua虚拟机(lua_State实例)时传入.当然自定义内存管理器必须遵循Lua已定义的一些行为规则 ...

  2. 中间件监控之Apache

    补 系统架构 nginx接到请求后把请求转发到tomcat,还有种方式是转发到apache(php项目),或者其他语言的应用服务器(放置我们的项目) ngnix:是web服务器,接受和转发请求用的,不 ...

  3. AIX逻辑卷扩展空间

    aix磁盘系统 a.基本概念: PV 物理卷:普通的直接访问的存储设备,有固定的和可移动的之分,代表性的就是硬盘. vg 卷组:AIX中最大的存储单位,一个卷组由一组物理硬盘组成,也就是由一个或多个物 ...

  4. uml 符号关系示意

    类(Class) 类(图A)是对象的蓝图,其中包含3个组成部分.第一个是Java中定义的类名.第二个是属性(attributes).第三个是该类提供的方法.属性和操作之前可附加一个可见性修饰符.加号( ...

  5. maven-gpg-plugin:1.2:sign (sign-artifacts) on project jdbc-pool: Cannot obtain passphrase in batch mode或者是Plugin execution not covered by lifecycle configuration

    本解决方案转自:http://blog.csdn.net/tangximing123/article/details/21179467 执行 Maven install 时报错: Failed to ...

  6. vs2010程序运行出错 link : fatal error lnk1123: 转换到 coff 期间失败: 文件无效或损坏

    vs2010程序运行出错 link : fatal error lnk1123: 转换到 coff 期间失败: 文件无效或损坏 2014-03-27 11:34杜_柏 | 浏览 36144 次 请问这 ...

  7. 7处ff与ie中读写html、css相关属性的不同之处

    1. float样式属性 IE syntax: document.getElementById("test").style.styleFloat = "left" ...

  8. uboot在nandflash存储时内存和NandFlash存储空间

    硬件采用nandflash,nandflash为8位数据宽度,没有dataflash和norflash. Nandflash空间分配为 bootstrap + u-boot + env + linux ...

  9. nfs服务器与客户端配置

    服务器端(PC)配置 ubuntu提供两种NFS服务器:一种以内核模块形式提供,nfs-kernel-server:一种以用户空间程序形式提供,nfs-user-server;两种择一即可.1. 安装 ...

  10. uboot中MAC网络(待续)

    start ->start_armboot ->main_loop 实际应用中问题:为什么从nandflash读出的MAC(写到物理phy上)与上层网口地址不同(上层网口采用env的mac ...