2017-03-07 77 views
0

因此,我使用Visual Studio 2012,并将项目设置设置为“使用unicode”。Unicode字符串visual C++构造函数

我有这个包括我的文件:

#include <string> 
using namespace std; 

,当我尝试这样做

//process.szExeFile - WCHAR[260] 
//name - PCSTR 
if (string(process.szExeFile) == string(name)) 

Visual Studio中抛出一个错误C2665。

我在做什么错?

+2

什么是实际错误文本? – NathanOliver

+0

错误C2665:std :: basic_string <_Elem,_Traits,_Alloc> :: basic_string:17重载中没有一个可以转换参数 – BerNardEr

+0

尝试'wstring(process.szExeFile)' –

回答

2

我在做什么错?

当项目设置为“使用unicode”时,process.szExeFile字段的类型为WCHAR[]std::string类不提供接受WCHAR[](或wchar_t*)作为输入的构造函数。

您正在比较name变量作为非Unicode字符串,所以我假定您不关心非ASCII字符。如果这是真的,你可以这样做:

std::wstring exeStr(process.szExeFile); 
std::string exeStrA(exeStr.begin(), exeStr.end()); 
if (exeStrA == string(name)) 

如果你关心非ASCII字符,你应该这样做的其他方式,使用wsctombs()name字符串转换为Unicode,例如(你可以找到这里是一个例子:How do I convert a string to a wstring using the value of the string?)。

+0

谢谢,我真的没有想过。 – BerNardEr