ошибка C2664: 'callToPrint': невозможно преобразовать параметр 1 из 'std :: wstring' в 'LPTSTR' - PullRequest
1 голос
/ 14 июля 2011

Я преобразовал узкую строку в широкую строку следующим образом:

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 ]

1 голос
/ 14 июля 2011

Вы также должны использовать .c_str () здесь.

Кроме того, я бы прочитал имя принтера непосредственно в WprinterName, используя

getline(wcin, Wprintername);
0 голосов
/ 14 июля 2011

Ваша проблема в том, что callToPrint в основном утверждает, что ожидает строку C, которую он может изменить, т.е. не const.Отсюда использование if LPTSTR вместо LPTCSTR VC macro.Изменяет ли он буфер или нет, зависит от его реализации.Теперь w_string.c_str() возвращает const wchar_t*, что в соответствии с определением c_str () вы не должны изменять (даже если вы можете привести его к wchar_t*, в этом случае ваш код скомпилируется.

Так как callToPrint объявлен таким образом, вы должны предоставить ему неконстантную строку C. Для этого вы можете отказаться от использования wstring WprinterName и использовать необработанный массив wchar_t (илиTCHAR, если вы хотите придерживаться типов VC.) Используйте этот буфер в MultiByteToWideChar и callToPrint, и не забудьте освободить его в конце ...

Если вам нужен wstring для дальнейшей обработки читайте: Преобразование std :: string в const char * или char * для некоторых дополнительных предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...