Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
-3 / 3 / 1
Регистрация: 21.03.2015
Сообщений: 133

Не работают примеры из книги Щупака

17.11.2015, 21:07. Показов 2362. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
что делать? Одно только
C++
1
error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из "const char [6]" в "LPCWSTR"
Задолбало до невозможности
Мне что визуал студио 6.0 1998 года ставить? я понимаю что типо сейчас что винапи с 1961 года сильно не изменился, хотя зачем-то вышла вс 2015.
Пожалуйста помогите! Я не хочу писать на .NET C++ cli

Добавлено через 12 минут
Создал проект всё как надо: http://cppstudio.com/post/9384/
исправил ошибки перевода из конст чар в какойто LWRT (Перед "" дописал L = L" hello world")
Откомпилилось без ошибок, и тут:
C++
1
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Вот лог:
Кликните здесь для просмотра всего текста
"GospodyPomogy.exe": Загружено: "C:\Users\lol\Documents\Visual Studio 2010\Projects\GospodyPomogy\Debug\Gospod yPomogy.exe", Символы загружены.
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll" , Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\apphelp.dll", Невозможно найти или открыть файл PDB
SHIMVIEW: ShimInfo(Complete)
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\user32.dll", Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\gdi32.dll", Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\imm32.dll", Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\msctf.dll", Невозможно найти или открыть файл PDB
"GospodyPomogy.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB
Первый этап обработки исключения в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Первый этап обработки исключения в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Первый этап обработки исключения в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Первый этап обработки исключения в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Первый этап обработки исключения в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Программа "[2668] GospodyPomogy.exe: Машинный код" завершилась с кодом 0 (0x0).

Исходник: main.cpp (ед в проекте): #include <windows.h>

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
#include <windows.h>
 
ATOM MyRegisterClass(HINSTANCE hInstance); 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
    HWND hMainWnd;
    //char szClassName[] = "MyClass";
    MSG msg;
    
/*  
        WNDCLASSEX wc;
        
        // Заполняем структура класса
        wc.cbSize        = sizeof(wc);
        wc.style         = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   = WndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = szClassName;
        wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
 */  
      
    // Регестрируем основной класс окна
    MyRegisterClass(hInstance);
    // Создаём основное окно приложения
    hMainWnd = CreateWindow(
    "Hello", "A Hello Application", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
    (HWND)NULL, (HMENU)NULL,
    (HINSTANCE)hInstance, NULL
    );
    
    if (!hMainWnd) {
    MessageBox(NULL, "Cannot create main window!", "Error", MB_OK | MB_ICONERROR);
    return 0;
    }
    
    
    ShowWindow(hMainWnd, nCmdShow);
    
    
    
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    
    return msg.wParam;
}
// Вот она
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
 
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszClassName  = "Hello";
    wcex.hIconSm        = LoadIcon(wcex.hInstance, IDI_APPLICATION);
 
    return (RegisterClassEx(&wcex)!=0);
}
 
 
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {       
        HDC hDC;
        PAINTSTRUCT ps;
        RECT rect;
        
        switch (uMsg)
        {
        case WM_PAINT:
            hDC = BeginPaint(hWnd, &ps);
            
            GetClientRect(hWnd, &rect);
            DrawText(hDC, "Hello, World!", -1, &rect,
                DT_SINGLELINE | DT_CENTER | DT_VCENTER );
            EndPaint(hWnd, &ps);
            break;
case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
        
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, uMsg, wParam, lParam);
        }
        return 0;
    }
как мне дальше жить?

Добавлено через 4 минуты
Пересоздал в вс 2008 - та же хрень,
у меня вин 8 х64 без обновлений, учетка не админская
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2015, 21:07
Ответы с готовыми решениями:

Ошибки в примере из книги Щупака
Парни добрый день. Сел за изучение книги Юрия Щупака Win 32 Api. В примере &quot;Hello World&quot;- второй вариант никак не могу понять где ошибся....

Ошибки в примере из книги Щупака
Начал читать книжку Щупака &quot;Win32 Api Эффективная разработка приложений&quot; . Переписал пример его кода в VS 2012, выдает 2 ошибки, подскажите...

Не работают примеры из книги "Эндрю Стиллмен, Грин - Изучаем c#"
Форумчане, уже отчаялся самостоятельно разобраться. Раз уж вы проходили все примеры по книге - подскажите, что я делаю не так. У меня не...

6
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
17.11.2015, 22:05
в настройках проекта ткни х64

п.с. а ваще кто-то юзает винапи как винапи в повседневной деятельности?
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.11.2015, 09:30
Цитата Сообщение от ponchic Посмотреть сообщение
что делать? Одно только
error C2664: CreateWindowExW: невозможно преобразовать параметр 2 из "const char [6]" в "LPCWSTR"
Задолбало до невозможности
Читай про TCHAR, например здесь:

Что такое TCHAR, WCHAR, LPSTR, LPWSTR,LPCTSTR (итд)
http://habrahabr.ru/post/164193/

Поправка (от меня)
СОВЕТ. Используйте общие типы данных и имена для представления символов и строк.
СОВЕТ. НЕ ИСПОЛЬЗУЙТЕ общие типы данных и имена для представления символов и строк.
Всегда, где только возможно, старайтесь избегать TCHAR,_tmain и т.п. и используйте Unicode.


и здесь:

Using Generic-Text Mappings
https://msdn.microsoft.com/en-... ey6h6.aspx

Мне что визуал студио 6.0 1998 года ставить? я понимаю что типо сейчас что винапи с 1961 года сильно не изменился, хотя зачем-то вышла вс 2015.
Пожалуйста помогите! Я не хочу писать на .NET C++ cli
Панику прекратить.
Возьми себя в руки и пойми, что знания и умения даются не сразу,
они приходят очень постепенно, как награда за упорство и любознательность.

Создал проект всё как надо: http://cppstudio.com/post/9384/
исправил ошибки перевода из конст чар в какойто LWRT (Перед "" дописал L = L" hello world")
Откомпилилось без ошибок, и тут:
Необработанное исключение в "0x76c75502" в "GospodyPomogy.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Для диагностики ошибки можно использовать отладчик. Запусти в Debug, когда вылетит, нажми "Break",
окажешься в месте исключения. Далее можно по "Call Stack" увидеть, где именно упало.
Код 0xC0000005 - это access violation, доступ к невалидной памяти.
0xcccccccc - это, скорее всего, какая-то неинициализированная переменная.
Внимательно просмотрев код, очень быстро выясняется, что структура WNDCLASSEX заполнена не вся.
Исправление (не лучшее, но возможное):
C++
1
WNDCLASSEX wcex = {0};
После чего все запускается и работает. Удачи !

Цитата Сообщение от fmtuner Посмотреть сообщение
а ваще кто-то юзает винапи как винапи в повседневной деятельности?
Не поверишь - некоторые делают это ежедневно, еще и с удовольствием (извращенцы)
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
18.11.2015, 11:43
Цитата Сообщение от Убежденный Посмотреть сообщение
Поправка (от меня)
СОВЕТ. НЕ ИСПОЛЬЗУЙТЕ общие типы данных и имена для представления символов и строк. Всегда, где только возможно, старайтесь избегать TCHAR,_tmain и т.п. и используйте Unicode.
А обоснуй?
Я правильно понял, что перенос кода на другие ОС/компиляторы даже не рассматривается?
0
-3 / 3 / 1
Регистрация: 21.03.2015
Сообщений: 133
18.11.2015, 21:16  [ТС]
Цитата Сообщение от fmtuner Посмотреть сообщение
в настройках проекта ткни х64
ну допустим скачал ты файл, а он оказался вирусом, ты его запустил и х**к: Необрабатываемое исключение в приложении
Самому приятно будет?

Добавлено через 15 минут
Цитата Сообщение от fmtuner Посмотреть сообщение
в настройках проекта ткни х64
когда было win 32 компилировалось и запускалось с этой ошибкой, поставил х64 и ошибки которые я исправил L перед скобками опятьповилась:
C++
1
2
3
4
5
6
7
8
9
10
11
main.cpp(39): error C2664: CreateWindowExA: невозможно преобразовать параметр 2 из "const wchar_t [6]" в "LPCSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>main.cpp(42): error C2664: MessageBoxA: невозможно преобразовать параметр 2 из "const wchar_t [27]" в "LPCSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>main.cpp(73): error C2440: =: невозможно преобразовать "const wchar_t [6]" в "LPCSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>main.cpp(93): error C2664: DrawTextA: невозможно преобразовать параметр 2 из "const wchar_t [14]" в "LPCSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>
1>СБОЙ построения.
1>
Добавлено через 7 минут
Цитата Сообщение от Убежденный Посмотреть сообщение
используйте Unicode.
ЗАРАБОТАЛО УУРРРААА
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
18.11.2015, 22:15
Цитата Сообщение от CheshireCat
Цитата Сообщение от Убежденный
СОВЕТ. НЕ ИСПОЛЬЗУЙТЕ общие типы данных и имена для представления символов и строк. Всегда, где только возможно, старайтесь избегать TCHAR,_tmain и т.п. и используйте Unicode.
А обоснуй?
TCHAR придумали давно, чтобы упростить миграцию на Unicode (UTF-16).
Лет пятнадцать-двадцать назад, когда Юникод только-только появлялся и его поддерживали
далеко не все системы, это было актуально. Сейчас уже нет. Зачем ? Сейчас, если твоя
программа под Windows не использует широкие символы и UTF-16, хотя бы для взаимодействия с
системой, у нее гарантированно будут проблемы, связанные с интернационализацией -
"кракозябры" вместо текста, невозможность обрабатывать длинные файловые пути,
невозможность использовать некоторые компоненты системы и т.п.

Это с одной стороны. А с другой, техника TCHAR требует дополнительных "ресурсов": к
примеру, ты должен будешь везде писать tcslen вместо wcslen, везде "sizeof (TCHAR)" вместо
"sizeof (wchar_t)" или вместо "2" (т.к. sizeof (wchar_t) == 2 на Windows), что достаточно
часто встречается. Тут сразу вопросы: что делать с std::wstring или с std::wcout (типов
std::tstring и std::tcout в стандарте нету, например), как поступать с функциями, которые есть
только в одном варианте (а таких немало, это почти весь Native API, например) ? Что делать с
приведениями типов, когда константная wchar_t-строка кастуется в стиле C к неконстантной ?
При переключении TCHAR компилятор даже не выругается. А еще есть некоторые функции, которые
ведут себя немного по-разному в A- и W-вариантах, я периодически сталкиваюсь то тут, то там с
интересными "побочными эффектами" на этой почве. Например, A-вариант выкидывает код ошибки, а
W-вариант с теми же аргументами приводит к access violation. Да, и надо еще учитывать, что
каждое изменение в коде, затрагивающее каким-то боком строки или символы, выраженные через
TCHAR, нужно тестировать в двух конфигурациях: 1) TCHAR = wchar_t; 2) TCHAR = char.
А в чем выгода ? Все равно неюникодные кодировки в Windows использовать нет смысла, т.к.
непортабельно на другие локализации. Выходит, TCHAR - это лишние расходы на пустом месте.

За несколько последних лет, что я занимаюсь разработкой под Windows, я пожалел о
неиспользовании TCHAR только один раз - когда нужно было сделать порт одного
приложения под Windows 98, где поддержки Юникода "из коробки" нет.
К счастью, TCHAR и там не потребовался, нашлось другое решение под названием
"Microsoft Layer for Unicode".

Я правильно понял, что перенос кода на другие ОС/компиляторы даже не рассматривается?
Возможно, это единственное живое возражение в защиту TCHAR.
Но я не представляю, что кто-то с помощью TCHAR будет обеспечивать кросс-платформенный
способ работы с символами и строками, потому что, IMHO, это слишком опасный и подверженный
ошибкам путь. Намного проще юзать std::string с UTF-8 как базовый тип, конвертируя его в
нужных местах в соответствующий каждой платформе "internal representation".
1
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
20.11.2015, 18:33
Хорошо что я хреновый программист, после этого поста буду спать спокойно.\


П.С. про х64 я "от балды" сказал, когда увидел WoW
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.11.2015, 18:33
Помогаю со студенческими работами здесь

Все примеры по C# не работают
Пытаюсь запустить ряд примеров из статей, типа: using System; using System.WinForms; using System.Drawing; public class MyForm :...

Не работают примеры из учебника???
Собственно говоря попробовал набрать два таких примера: Пример №1: (Не выводится сообщение с формированной якобы строкой, может я не...

Не получается ассемблировать примеры из книги
Здравствуйте! В книге Питера Абеля есть ряд кодов которые не ассемблируются! Вот например он пишет типичный пример COM-программы: page...

Примеры из книги выдают ошибки
я чяйник, хочу выучить програмирование, в железе разбираюсь , хочу выучить с++, сейчас читаю книгу УОЛТЕР САВИЧ ПРОГРАММИРОВАНИЕ С++ 4...

Сохранение из DataGridView в БД: примеры не работают
На всех Форумах написано про сохранении данных из datagridview. Но делая как показано в постах, у меня все равно возникает ошибка. Можете...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru