понедельник, 17 мая 2010 г.

как подружить char с wchar_t?

Меня бесконечно удивляет, насколько часто мы наступаем на одни и те же грабли, а иногда возникает ощущение, что даже если нам ввести тариф на это дело, мы бы продолжали на них наступать, независимо от стоимости этого удовольствия.

Вы видите ошибку: "cannot convert parameter ... from 'char [...]' to 'LPCWSTR"?

Или может "cannot convert parameter ... from 'wchar_t [...]' to 'LPCSTR"?

Может вообще что-то вроде такого: "cannot convert parameter ... from 'char [...]' to 'LPCTSTR"?


Тогда первым делом подумайте о том, что вы неправильно работаете со строками, не visual studio, а только вы сами.

Если вы с этим согласны, то прекращайте на ровном месте конвертировать char в wchar_t, LPCWSTR, LPCTSTR и обратно.

LPCWSTR и LPCSTR - это просто макросы, которые в зависимости от настроек проекта подставляют вместо себя const char* или const wchar_t*. Точно так же соответствующие сущности подставляют вместо себя макросы большинства типов данных и функций WinAPI, например: CreateWindow или WNDCLASSEX.

Из этого следует только то, что для работы с этими типами и функциями WinAPI необходимо использовать только те типы, с которыми они могут взаимодействовать.

Единственный строковый тип данных, который однозначно допустим в WinAPI - это TCHAR и несколько его модификаций: LPCTSTR, LPTSTR.

Существует совсем немного исключений из этого правила, поэтому, когда вам нужно создать и/или передать строковый буфер, объявляйте его правильно и проблем со строками в WinAPI у вас никогда не будет:
TCHAR Buffer1[100];
TCHAR Buffer2[] = TEXT("My buffer");
а чтобы это правило было сложно забыть,  нужно просто обратить внимание на эту буковку T в названии всех этих "подставных" типов.

Комментариев нет:

Отправить комментарий