【VS开发】ConvertBSTRToString(filename) 不能将string转换为BSTR
环境:win7,x64,vs2008 sp1
把VC 6.0的工程文件用VS2008打开,编译报错: error C2664:“_com_util::ConvertBSTRToString”: 不能将参数 1从“String”转换为“BSTR”;
出错的程序代码是这句:
char*Filename=_com_util::ConvertBSTRToString(filename);
这代码是以前在VC 6.0里写的。VC 6.0里的默认的内置字符集是ANSI.
而上面的一段代码里的filename是一个定义的类型变量:String filename;
String 的定义是:typedef unsigned short* String;
BSTR 在VC6.0里是typedef unsigned short*,而在VS2008里却是wchar_t*,wchar_t是一个 16-bit UNICODE character;
注意COM编程里面只支持wchar_t即unicode编码形式。虽然上面的unsined short与wchar_t都是16位的,但是不同编码之间是不兼容的。ANSI以8bit来表示一个字符,而unicode以16bit来表示一个字符。如果我们的内存单元是8位来单位的,比如一个字符串“abc",用ANSI来表示就占用四个存储单元,而用UNICODE来表示就占用8个存储单元。很显然这两种编码是兼容的。我们想像一下内存模型就知道。
解决:
英:Setting of the project in "C/C++ -> Language -> Treat wchar_t as Built-In Type" to "No" (originally it was: "Yes(/Zc:wchar_t)".
汉:在VS2008里:项目->属性->配置属性->C/C++->语言;把wchar_t视为内置类型改为否即可。
转自:http://blog.sina.com.cn/s/blog_5ed3e6210100ff7m.html
参考:http://blog.csdn.net/li_hai/article/details/100326
【VS开发】ConvertBSTRToString(filename) 不能将string转换为BSTR的更多相关文章
- C++ 将 std::string 转换为 char*
参考: std::string to char* C++ 将 std::string 转换为 char* 目前没有直接进行转换的方法.必须通过string对象的c_str()方法,获取C-style的 ...
- C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法:
public static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count); 将指定数目的字 ...
- C++不存在从std::string转换为LPCWSTR的适当函数
LPCWSTR是什么类型呢? 看看如何定义的: typedef const wchar_t* LPCWSTR; 顾名思义就是: LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符 ...
- string[]转换为int[]
今天碰到一个问题,要把string[]转换为int[],但是又不想使用循环转换,找了好久最后找到了这种方法,特此记录下. string[] input = { "1", " ...
- c#中char、string转换为十六进制byte的浅析
问题引出: string转换为byte(十六进制) static void Main(string[] args) { "; byte[] b = Encoding.Default.GetB ...
- JAVA 利用SimpleDateFormat将String转换为格式化的日期
1. /** * 使用用户格式提取字符串日期 * * @param strDate 日期字符串 * @param pattern 日期格式 * @return */ public static Dat ...
- openresty开发系列18--lua的字符串string操作
openresty开发系列18--lua的字符串string操作 string的相关操作 1)string.upper(s)接收一个字符串 s,返回一个把所有小写字母变成大写字母的字符串.print( ...
- C++Builder RAD Studio XE, UTF-8 String 转换为 char * 字符串的最简单方式, 常用于sqlite3开发
前段时间突然使用sqlite3开发,中间需要用中文,XE的缺省char*直接使用中文,在sqlite *.db3的数据库表格中显示是乱码,用数据库管理器来浏览等管理时非常不便. 于是决定还是使用utf ...
- php string转换为int
本身 var_dump : string(3) "002" 本身 is_numeric : bool(true) 本身 转换为数字 : int(2) 本身 转换为数字变量 : in ...
随机推荐
- .net 中跨域问题
1.ashx跨域接口 context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 2.w ...
- 04 DRF内容回顾、用户登录 (含跨域) (vuex vue-cookie)、用户认证 (Auth认证)(拦截器)
1.内容回顾 1.视图中常见的继承 2.频率访问控制源码 3.序列化,反序列化 2.初始化代码 1.后端代码:AuthView (1)目录结构 (2)urls (3)view (4)注释掉cors ( ...
- 【leetcode】1296. Divide Array in Sets of K Consecutive Numbers
题目如下: Given an array of integers nums and a positive integer k, find whether it's possible to divide ...
- luogu 4047 [JSOI2010]部落划分 最小生成树
最小生成树或者二分都行,但是最小生成树会好写一些~ Code: #include <bits/stdc++.h> #define ll long long #define N 100000 ...
- 百度AI接口调用
创建应用 登录网站 登录www.ai.baidu.com 进入控制台 进入语音技术 创建应用 管理应用 技术文档 SDK开发文档 接口能力 版本更新记录 注意事项 目前本SDK的功能同REST API ...
- Codeforces 915E. Physical Education Lessons(动态开点线段树)
E. Physical Education Lessons 题目:一段长度为n的区间初始全为1,每次成段赋值0或1,求每次操作后的区间总和.(n<=1e9,q<=3e5) 题意:用线段树做 ...
- Linux常用目录及目录作用说明
Linux目录结构 /:根目录 /boot:存放系统启动相关文件 /etc:存放系统配置文件 /dev:存放系统设备文件(如/dev/sda) /run:存放系统运行相关文件 /bin:存放系统命令 ...
- shell练习1
题目 把ls -l 的输出按照属主分类,打印每个属住的文件名 ls -l |sed -n '2,$p'| awk ' {hash[$]=hash[$]} END{ for (user in hash) ...
- 使用vim编辑python智能提示
一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...
- redis服务及其配置与应用(window 环境下)
一.redis简介:Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API(源自百度百科),个人更喜欢下面的解释:我们 ...