0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 30

Невозможно преобразовать const tchar в LPWSTR

19.06.2021, 10:02. Показов 2396. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи пытаюсь программировать winapi и при определении функции CreateMenuItem в mii.dwTypeData = str; возникает ошибка невозможно преобразовать const tchar в LPWSTR. Вот текст модуля:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#define UNICODE
 
#include<windows.h>         //заголовочный файл для win32 приложений
#include<tchar.h>
#include<wchar.h>
 
#define _CRT_SECURE_NO_WARNINGS
#include <commapi.h>
#pragma comment (lib, "comctl32.lib")
 
#define ID_PROCESS      3       //идентификаторы
#define ID_KILLPROC     2
#define ID_EXIT         4
#define ID_HELP         1
#define PROCMAX         2
#define MAINMENU        1
#define SizeWindow      400     //размер окна
//прототип оконной функции
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
 
TCHAR szWinName[] = _T("main");     //имя окна
TCHAR str[255];                 //буфер     
int maxX, maxY;                 //максимальные значения Х и У
int X = 0, Y = 0;
int procnum = 0;                    //номер процесса
 
HDC memdc;                      //контекст окна
HBITMAP hbit;                   //дескриптор картинки
HBRUSH hbrush;                  //тип кисти
PROCESS_INFORMATION pinfo[PROCMAX]; //массив структур информации о процессах
 
//главная функция приложения
int APIENTRY WinMain(HINSTANCE hThisInst, HINSTANCE hPrevinst, LPSTR lpszArgs, int nWinMode)
{
    HWND hwnd;                      //handle окна
    MSG msg;                        //сообщение
    WNDCLASS wcl;                   //класс окна
 
    //регистрируем новый класс окна в системе
    wcl.hInstance = hThisInst;
    wcl.lpszClassName = szWinName;
    wcl.lpfnWndProc = WindowFunc;
    wcl.style = 0;
    wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcl.lpszMenuName = NULL;
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0;
    wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 
    if (!RegisterClass(&wcl)) return 0; //класс окна зарегистрирован
 
    //создадим экземпляр нового класса
    hwnd = CreateWindow(szWinName, _T("ПП_01   "),
        WS_OVERLAPPEDWINDOW,
        GetSystemMetrics(SM_CXFULLSCREEN) / 2,
        GetSystemMetrics(SM_CXFULLSCREEN) / 2 - SizeWindow * 2,
        SizeWindow, SizeWindow * 2,
        HWND_DESKTOP,
        NULL, hThisInst, NULL);
 
 
    ShowWindow(hwnd, nWinMode);     //отобразим его на экране
 
    while (GetMessage(&msg, NULL, 0, 0))    //обработка сообщений от окна
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
BOOL CreateMenuItem(HMENU hMenu, const TCHAR* str, UINT uIns, UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)
{
    MENUITEMINFO mii;
    mii.cbSize = sizeof(MENUITEMINFO);
    mii.fMask = MIIM_STATE | MIIM_TYPE | MIIM_SUBMENU | MIIM_ID;
    mii.fType = fType;
    mii.fState = MFS_ENABLED;
    mii.dwTypeData = str;
    mii.cch = sizeof(str);
    mii.wID = uCom;
    mii.hSubMenu = hSubMenu;
    return InsertMenuItem(hMenu, uIns, flag, &mii);
}
 
//оконная функция
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;                        //контекст
    PAINTSTRUCT paintstruct;            //структура для рисования
    TEXTMETRIC tm;
    STARTUPINFO startin;                //структура для запуска процессов
    static HMENU hMainMenu, hGameMenu, hHelpMenu;
 
    switch (message)
    {
    case WM_CREATE: {
        hMainMenu = CreateMenu();   // создаем главное меню
 
        hGameMenu = CreatePopupMenu();  // создаем врем.меню"Игра"
        int i = 0;              // инициализация позиции в меню 
        CreateMenuItem(hGameMenu, _T("Открыть процесс"), i++, ID_PROCESS, NULL, FALSE, MFT_STRING);
        CreateMenuItem(hGameMenu, _T("Закрыть процесс"), i++, ID_KILLPROC, NULL, FALSE, MFT_STRING);
 
        hHelpMenu = CreatePopupMenu();// создаем врем.меню "Помощь"
 
        CreateMenuItem(hHelpMenu, _T("О программе"), i++, ID_HELP, NULL, FALSE, MFT_STRING);
 
        // Подключаем временные меню к главному меню
        CreateMenuItem(hMainMenu, _T("Процессы"), i++, 0, hGameMenu, FALSE, MFT_STRING);
        CreateMenuItem(hMainMenu, _T("Помощь"), i++, 0, hHelpMenu, FALSE, MFT_STRING);
        CreateMenuItem(hMainMenu, _T("Выход"), i++, ID_EXIT, 0, FALSE, MFT_STRING);
        SetMenu(hwnd, hMainMenu); DrawMenuBar(hwnd);
 
 
        maxX = GetSystemMetrics(SM_CXSCREEN);
        maxY = GetSystemMetrics(SM_CYSCREEN);
        hdc = GetDC(hwnd);
        memdc = CreateCompatibleDC(hdc);
        hbit = CreateCompatibleBitmap(hdc, maxX, maxY);
        hbrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
        SelectObject(memdc, hbit);
        SelectObject(memdc, hbrush);
        PatBlt(memdc, 0, 0, maxX, maxY, PATCOPY);
        ReleaseDC(hwnd, hdc);
        break;
    }
 
    case WM_COMMAND:            //если нажата одна из опций меню
        switch (LOWORD(wParam))
        {
        caseID_PROCESS: //открытьпроцесс
            {
                if (procnum == PROCMAX)
                {//если их два, то больше нельзя
                    MessageBox(hwnd, _T("Нельзя больше создать !"), _T("Предупреждение"), MB_OK + MB_ICONASTERISK);
                    break;
                };
 
                TCHAR TestName[] = _T("process.exe");                       //сформируем имя процесса для запуска
                TestName[7] = procnum + 49;
 
                //заполнимструктуру STARTUPINFO
                startin.cb = sizeof(STARTUPINFO);
                startin.lpReserved = NULL;
                startin.lpDesktop = NULL;
                startin.lpTitle = NULL;
                startin.dwFlags = STARTF_USESHOWWINDOW;
                startin.cbReserved2 = 0;
                startin.lpReserved2 = NULL;
                startin.wShowWindow = SW_SHOWMINIMIZED;
                //запускаем новый процесс
                if (CreateProcess(NULL, TestName, NULL, NULL, FALSE, 0,
                    NULL, NULL, &startin, &(pinfo[procnum])))
                {
                    GetTextMetrics(memdc, &tm);                             //вывод в главное окно, что процесс создан
                    wsprintf(str, _T("Процесс %d создан"), procnum);
                    TextOut(memdc, X, Y, str, wcslen(str));
                    Y = Y + tm.tmHeight + tm.tmExternalLeading;
                    InvalidateRect(hwnd, NULL, 1);
                    procnum++;
                } //если создать процесс не удалось, то ошибка
                else
                    MessageBox(hwnd, _T("Не найдена тестовая программа!"), _T("Ошибка"), MB_OK + MB_ICONEXCLAMATION);
            }
            break;
 
        case ID_KILLPROC:       //закрыть процесс
            if (procnum) procnum--;//декремент количества процессов //если процессов меньше одного, то закрывать нечего
            else
            {
                MessageBox(hwnd, _T("Нет больше процессов !"),
                    _T("Предупреждение"), MB_OK + MB_ICONASTERISK);
                break;
            }
            GetTextMetrics(memdc, &tm);
            //функция завершает процесс
            TerminateProcess(pinfo[procnum].hProcess, 0);                   //вывод в главное окно, что процесс завершён
            wsprintf(str, _T("Процесс %d завершен"), procnum);
            TextOut(memdc, X, Y, str, wcslen(str));
            Y = Y + tm.tmHeight + tm.tmExternalLeading;
            InvalidateRect(hwnd, NULL, 1);
            break;
 
        case ID_HELP: //о программе
            MessageBox(hwnd, _T("Название: ПП_01"), _T("О программе"), MB_OK);
            break;
 
        case ID_EXIT: //Выход
            DeleteDC(memdc);
            PostQuitMessage(0);
            break;
 
        } break;
 
    case WM_PAINT: //перерисовка окна
        hdc = BeginPaint(hwnd, &paintstruct);
        BitBlt(hdc, 0, 0, maxX, maxY, memdc, 0, 0, SRCCOPY);
        EndPaint(hwnd, &paintstruct);
        break;
 
    case WM_DESTROY: //если нажата кнопка, закрыть
        DeleteDC(memdc);
        PostQuitMessage(0);
        break;
 
    default: // поумолчанию
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2021, 10:02
Ответы с готовыми решениями:

Невозможно преобразовать параметр 3 из 'const wchar_t [20]' в 'int'
Здравствуйте! Подскажите пожалуйста, где тут ошибка? #include &lt;windows.h&gt; #include &lt;hge.h&gt; #include &lt;hgeresource.h&gt; ...

Невозможно преобразовать аргумент 3 из "TCHAR [1024]" в "LPCCH"
Люди добрые, помогите пожалуйста решить проблему. Хочу преобразовать строку в Unicode, для чего использую функцию: int...

FindWindow Debug/Release и ошибка "Невозможно преобразовать const char[12] в LPСWSTR"
Здравствуйте. Есть кусок кода. HWND hWindow = FindWindow(0, &quot;WindowName&quot;); В Debug компилится, в Release выбивает ошибку...

7
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.06.2021, 10:15
Цитата Сообщение от Skripan Посмотреть сообщение
невозможно преобразовать const tchar в LPWSTR
ну так уберите const, зачем он вам там нужен
1
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 30
19.06.2021, 10:19  [ТС]
Тогда начинаются проблемы с преобразованием в строках 103, 104, 108 и т.д.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.06.2021, 10:32
Цитата Сообщение от Skripan Посмотреть сообщение
Тогда начинаются проблемы с преобразованием в строках 103, 104, 108 и т.д.
определите строковые данные типа _T("Открыть процесс") отдельно (как это и положено) и передайте их в функцию.
C++
1
2
TCHAR Processes[MAX_PATH] = _T("Процессы");
CreateMenuItem(hMainMenu, Processes, i++, 0, hGameMenu, FALSE, MFT_STRING);
2
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 30
19.06.2021, 11:31  [ТС]
Спасибо, но теперь куча неопределенных ошибок связанных с obj. Попробую пока сам разобраться

Добавлено через 42 минуты
Теперь само окно с меню работает, но при запуске процесса ID_PROCESS всегда выводиться сообщение Не найдена тестовая программа.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.06.2021, 11:56
Цитата Сообщение от Skripan Посмотреть сообщение
выводиться сообщение Не найдена тестовая программа
ну как-то так
TestName = 0x00000028dc0ff1f8 L"process1exe"
проблема вот здесь
C++
1
TestName[7] = procnum + 49;
PS: юзайте отладчик, сразу станет понятнее по ошибкам.
1
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 30
19.06.2021, 12:15  [ТС]
Ничего понять не могу
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
19.06.2021, 12:19
Цитата Сообщение от Skripan Посмотреть сообщение
Ничего понять не могу
ну как минимум
C++
1
TestName[6] = procnum + 49;
так хотя бы будет process1.exe

а дальше сами, я копать ваш код не хочу, потому что это ахинея.
терпеть не могу когда создают массивы процессов - работайте с каждым процессом по отдельности: открыли <-> закрыли, следующий..
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2021, 12:19
Помогаю со студенческими работами здесь

Fopen: невозможно преобразовать параметр 1 из 'LPWSTR' в 'const char *'
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include&lt;cstdio&gt; #include&lt;io.h&gt; int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE...

преобразовать wchar_t [255] в const TCHAR []
столкнулся с проблемой разных типов строк... wchar_t path_msk; ....................................................... ...

Невозможно преобразовать параметр 1 из 'const char [3]' в 'const wchar_t *
void CprojectDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: добавьте свой код обработчика сообщений или...

Невозможно преобразовать 'const char [6]' в 'long'
Есть код: FILE *Protectdll; FILE *Coredll; FILE *Console; Protectdll = fopen(&quot;Protect.dll&quot;, &quot;rb&quot;); Coredll =...

Невозможно преобразовать параметр 1 из 'const char [15]' в 'LPCWSTR'
с сайта скачала прогу которая должна рисовать сферу, но при компилировании выходит ошибка:error C2664: auxInitWindowW: невозможно...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru