Я использую VS2010, и у меня есть это в моем коде:
::MessageBox(0, "Init FAILED", 0, 0);
Когда я скомпилировал проект, я получил ошибку, которая не может преобразовать параметр 2 из «const char [25]» в «LPCWSTR». Я искал проблему в Интернете, люди сказали мне изменить параметр «наборы символов» в настройках моего проекта с «Unicode» на «Not Set». Но это не работает. Когда я запускаю эти коды:
#ifdef UNICODE
printf("unicode");
#else
printf("others");
#endif
Я получаю один и тот же ответ «юникод», независимо от того, какой вариант я выбрал. Что мне делать, чтобы справиться с проблемой?
L"Init Failed"
._T()
полезен только в том случае, если вы собираетесь компилировать как в ANSI, так и в Unicode, и единственной причиной этого будет поддержка Win9x, что уже давно не имеет значения. 30.03.2014_T()
полезен только в старом/устаревшем коде и никогда не используется при разработке нового кода. Жаль, что в Win32 никогда не было (и никогда не будет) поддержки узких строк в кодировке UTF-8, тогда макрос_T()
и вся эта ерундаL""
отомрет. 30.03.2014_T()
предназначен для кода среды выполнения C и основан на определении_UNICODE
. Эквивалентом Win32 являетсяTEXT()
, который основан на определенииUNICODE
. Разные фреймворки, разные определения, разные макросы, схожие цели. Вы не должны смешивать их. Используйте макросы C для кода C и макросы Win32 для кода Win32, например:::MessageBox(0, TEXT("Init Failed"), 0, 0);
31.03.2014