Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lagilo
1 / 1 / 0
Регистрация: 17.04.2014
Сообщений: 121
#1

Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" - C++

05.10.2015, 13:12. Просмотров 608. Ответов 12
Метки нет (Все метки)

Выводит ошибку в условии. Если включать мультикодировку, то выводится одна ошибка, если Юникод, то другая. Как исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
BOOL CreateGLWindow( LPCWSTR title, int width, int height, int bits, bool fullscreenflag )
{
//********
if( !( hWnd = CreateWindowEx(  dwExStyle,          // Расширенный стиль для окна
    ("OpenGL"),          //если включить кодировку Юникода, то тут появляется ошибка. _T("OpenGL") - пишет
                                  //"идентификатор "_T" не определен"
    title,      //если включить мультикодировку, то тут выводит ошибку: "аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR""
    WS_CLIPSIBLINGS |  
    WS_CLIPCHILDREN |   
    dwStyle,     
    0, 0, 
    WindowRect.right-WindowRect.left,  
    WindowRect.bottom-WindowRect.top,  
    NULL,  
    NULL,
    hInstance,  
    NULL ) ) ) 
{
    KillGLWindow();
    MessageBox( NULL, "Window Creation Error.", "ERROR", MB_OK | MB_ICONEXCLAMATION );
    return false;
}
//**********
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2015, 13:12     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR"
Посмотрите здесь:

МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" C++
C++ значение типа "char *" нельзя присвоить сущности типа "LPWSTR"
Аргумент типа "char *" несовместим с параметром типа "LPCWSTR" C++
параметром типа "LPCWSTR" C++
C++ Аргумент типа "HDC" несовместим с параметром типа const PAINTSTRUCT
Аргумент типа "int **" несовместим с параметром типа "int (*)[26]" C++
C++ Ошибка "аргумент типа char несовместим с параметром типа char*"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12543 / 7105 / 797
Регистрация: 27.09.2012
Сообщений: 17,528
Записей в блоге: 2
Завершенные тесты: 1
05.10.2015, 13:24     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #2
Макросы
_T
_TEXT
Lagilo
1 / 1 / 0
Регистрация: 17.04.2014
Сообщений: 121
05.10.2015, 13:26  [ТС]     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Макросы
_T
_TEXT
Я так делал, но пишет, что "идентификатор не найден".
Я ведь правильно делаю?
C++
1
_T("OpenGL")
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
05.10.2015, 13:30     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #4
Lagilo, включи мультибайтовые строки, а не Юникод и не мультикодировку (не понял, что это такое, правда) И пиши обычные строки в кавычках - всё заработает!
Lagilo
1 / 1 / 0
Регистрация: 17.04.2014
Сообщений: 121
05.10.2015, 13:34  [ТС]     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Lagilo, включи мультибайтовые строки, а не Юникод и не мультикодировку (не понял, что это такое, правда) И пиши обычные строки в кавычках - всё заработает!
Под мультикодировкой как раз имею в виду мультибайтовую) Пардон)
Когда включаю мультибайтовую кодировку, то выводится ошибка "аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR"":
C++
1
2
3
if( !( hWnd = CreateWindowEx(  dwExStyle,          // Расширенный стиль для окна
    "OpenGL",
    title,         //ОШИБКА выводится тут
UnknownSoldier
567 / 88 / 35
Регистрация: 08.04.2015
Сообщений: 192
05.10.2015, 13:43     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #6
А что мешает описать первый параметр CreateGLWindow() с типом LPCSTR, а не LPCWSTR? Функция ведь своя собственная, не импорт из чужой библиотеки.
Lagilo
1 / 1 / 0
Регистрация: 17.04.2014
Сообщений: 121
05.10.2015, 14:05  [ТС]     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #7
Цитата Сообщение от UnknownSoldier Посмотреть сообщение
А что мешает описать первый параметр CreateGLWindow() с типом LPCSTR, а не LPCWSTR? Функция ведь своя собственная, не импорт из чужой библиотеки.
Теперь выводит ошибку линковки..
error LNK2019: ссылка на неразрешенный внешний символ "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long,char const *)" (?WndProc@@YGJPAUHWND__@@IIJPBD@Z) в функции "int __cdecl CreateGLWindow(char const *,int,int,int,bool)" (?CreateGLWindow@@YAHPBDHHH_N@Z)

Вот мой WndProc:
C++
1
LRESULT  CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM , LPCSTR);
Людвиг Бодмер
 Аватар для Людвиг Бодмер
279 / 276 / 100
Регистрация: 29.03.2013
Сообщений: 705
Завершенные тесты: 2
05.10.2015, 14:07     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #8
Lagilo,
C++
1
#include <tchar.h>
для макроса _T() подключи
UnknownSoldier
567 / 88 / 35
Регистрация: 08.04.2015
Сообщений: 192
05.10.2015, 14:33     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #9
У WndProc должно быть 4 параметра, 5-ый лишний.
Lagilo
1 / 1 / 0
Регистрация: 17.04.2014
Сообщений: 121
05.10.2015, 14:47  [ТС]     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #10
Да, это я уже знаю) Просто забыл исправить, прежде чем сюда скопировал)
C++
1
2
3
4
5
6
7
8
9
LRESULT CALLBACK WndProc(HWND, UINT , WPARAM, LPARAM);       // Прототип функции WndProc
BOOL CreateGLWindow( LPCSTR title, int width, int height, int bits, bool fullscreenflag )
{
//*******
WNDCLASS  wc;                // Структура класса окна
//*******
wc.lpfnWndProc      = (WNDPROC) WndProc; //тут выводит ошибку линковки о неразрешенном внешнем символе.
//*******
}
nmcf
4537 / 3875 / 1304
Регистрация: 14.04.2014
Сообщений: 15,205
05.10.2015, 14:54     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #11
Много тем создано с примерно таким содержанием: а как древние char-строки использовать с WinAPI, который уже давно работает на Unicode? Спрашивается, зачем? Пора забыть уже про 1251 и пользоваться WCHAR.
UnknownSoldier
567 / 88 / 35
Регистрация: 08.04.2015
Сообщений: 192
05.10.2015, 15:02     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Lagilo, а определение WndProc есть, или у вас только объявление? Без определения будет ошибка компоновки.

nmcf, это кому как удобнее. Я не пишу мультиязычных программ, и меня обычные строки более чем устраивают.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2015, 15:18     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR"
Еще ссылки по теме:

C++ Аргумент типа "const char*" несовместим с параметром типа "LPCWSTR"
C++ Ошибка преобразования: значение типа "float *" нельзя присвоить сущности типа "float"
Ошибка аргумент типа "char" несовместим с параметром типа "LPCSTR" C++
Работа с памятью: можно ли в массив объектов с полем типа "Родитель", вписать объекты с полем типа "Потомок" C++
Значение типа "char *" нельзя присвоить сущности типа "LPWSTR" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nmcf
4537 / 3875 / 1304
Регистрация: 14.04.2014
Сообщений: 15,205
05.10.2015, 15:18     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" #13
Цитата Сообщение от UnknownSoldier Посмотреть сообщение
Я не пишу мультиязычных программ
Это не важно. Русский-то используешь? Даже если нет, пойми, что Windows внутри на юникоде давно, а это просто для совместимости оставили.
Yandex
Объявления
05.10.2015, 15:18     Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR"
Ответ Создать тему
Опции темы

Текущее время: 00:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru