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

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

17.11.2015, 21:07. Показов 2404. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru