Невозможно назначить параметр lpCmdLine указателю char*

Эта проверка кода запускает приложение следующим параметром:

INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{

    char* szCmdLine = lpCmdLine;

...
}

Ошибка в этой строке: ошибка C2440: "инициализация" не может преобразовать из "LPTSTR" в "char *"

1 ответ

Это потому что 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;

...
}

или же

INT APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT iShow)
{

    LPTSTR szCmdLine = lpCmdLine;

...
}
Другие вопросы по тегам