string类型转换为LPCWSTR类型
时间:2008-05-09 19:06:46
来源:论坛整理 作者: 编辑:chinaitzhe
规定virtual int a(std::string service_name)参数必须为string类型。
但自己的代码中,假如将service_name规定为string类型的话,那么,在
OpenService(schSCManager, service_name, SERVICE_START ¦ SERVICE_QUERY_STATUS)
这个函数中,第二个参数必须为LPCWSTR类型,虽然能够强制转换,但转换的结果为乱码。
试问如何解决?
PS:假如重载虚函数,可以么?
将a(std::string service_name)重载成a(LPCWSTR service_name)
网友回复:还有就是
在另外的一个工程中,
OpenService(schSCManager, service_name, SERVICE_START | SERVICE_QUERY_STATUS)
第二个参数为static const char*类型,可以运行。按理我假如用string.c_str()的话可以将string类型转换为char类型。但实际上还是出现不能强制转换成LPCWSTR类型。
希奇的是在其他的工程中static const char*可以默认转换为LPCWSTR类型(不需要强制cast),但在现在的工程中就不可以了,是工程设置出错了么?
假如真是设置出错,那么怎么设置呢?
网友回复:std::string.c_str()
网友回复:将string 转化为 LPCWSTR:
string strText = "你好";
size_t size = string.length();
wchar_t *buffer = new wchar_t[size 1];
MultiByteToWideChar( CP_ACP, 0, strText.c_str(), size, buffer, size * sizeof(wchar_t) );
buffer[size] = 0; // 确保以 '\0' 结尾
现在buffer就是就包含里的你的转化后的 LPCSTR 了
不要忘记使用完后
delete buffer;
MultiByteToWideChar 具体用法请参见 MSDN
网友回复:参看楼上的做法,比较标准了。
网友回复:楼主,想搞Svchost啊?
网友回复:
string对象有这个函数
可以返回一个C风格的字符串
网友回复:然后你再reinterpret_cast
网友回复:要不你就重载吧
网友回复:up 3楼的做法
网友回复:reinterpret_cast 不到万不得已 千万不要使用
很轻易造成问题
网友回复:其实是设置出了问题,在工程设置中禁用unicode编码就行了。
关键字:string,类型,转换,LPCWSTR,类型,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面