错误C2664:'callToPrint':无法将参数1从'std :: wstring'转换为'LPTSTR'

时间:2011-07-14 11:10:38

标签: c++ windows visual-c++

我将一个窄字符串转换为宽字符串,如下所示:

string nameOfPrinter;
getline( cin , nameOfPrinter );
wstring WprinterName;
int number = MultiByteToWideChar( CP_UTF8 , 0 , nameOfPrinter.c_str() , nameOfPrinter.size() , &WprinterName , 0 );

// then i make a call to the function whose prototype is callToPrint( LPTSTR , LPVOID , DWORD , string )

// the calling statement is :
callToPrint( WprinterName , -----all other arguments-----,);

// But this call produces the following error error C2664: 'callToPrint' : cannot convert parameter 1 from 'std::wstring' to 'LPTSTR'

为什么会这样?请告诉我如何解决它?

2 个答案:

答案 0 :(得分:1)

你还需要在这里使用.c_str()。

另外,我使用

将打印机名称直接读入WprinterName
getline(wcin, Wprintername);

答案 1 :(得分:0)

你的问题是callToPrint基本上表明它需要一个可以修改的C字符串,即不是const。因此,使用LPTSTR而不是LPTCSTR VC宏。它是否实际上改变了缓冲区取决于它的实现。现在,w_string.c_str()会返回const wchar_t*,根据c_str()的定义,您不得更改(即使您可以将其转换为wchar_t*,在这种情况下您的代码将编译。

由于callToPrint以这种方式声明,因此必须为其提供非const C字符串。为此,您可以放弃使用wstring WprinterName,并使用原始数组wchar_t(或TCHAR,如果您想坚持使用VC类型)。在MultiByteToWideCharcallToPrint中使用该缓冲区,并且不要忘记在最后释放它...

如果您确实需要wstring进行进一步处理,请阅读:Convert std::string to const char* or char*以获取其他一些建议。