Это потому, что LPTSTR
может быть LPSTR
или LPWSTR
, учитывая настройки проекта UNICODE. Когда юникод включен, приложение использует LPWSTR
, если не LPSTR
.
LPSTR
— это просто псевдоним для char*
. LPWSTR
- wchar_t*
. T
в LPTSTR
означает тип TCHAR
, определение которого может быть char
или wchar_t
любым символом UNICODE
или _UNICODE
, определенным в вашем проекте.
LP
означает «длинный указатель», long — это 32-битный адрес памяти. STR
- строка.
Итак, давайте опишем LPSTR
- "длинный указатель на строку ANSI"; LPWSTR
- "длинный указатель на строку широких символов" и LPTSTR
- "длинный указатель на строку TCHAR
".
К букве W
или T
можно добавить префикс C
, например LPCSTR
, LPCTSTR
, LPCWSTR
, что означает, что эти указатели являются постоянными, например const char*
или const wchar_t*
.
Итак, ваш код должен выглядеть так:
INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{
TCHAR* szCmdLine = lpCmdLine;
...
}
or
INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{
LPTSTR szCmdLine = lpCmdLine;
...
}
person
Mykola
schedule
04.01.2016
TCHAR* szCmdLine = lpCmdLine;
работает? Afaik LPTSTR состоит из TCHAR, а не char. - person Joachim Isaksson   schedule 04.01.2016