Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 15:45   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Не проходит дебаг, в чем может быть ошибка?

Код:
#include <Windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 
	WPARAM wparam, LPARAM lparam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, 
					LPWSTR cmdLine, int cmdShow)
{
	UNREFERENCED_PARAMETER(prevInstance);
	UNREFERENCED_PARAMETER(cmdLine);

	WNDCLASSEX wndClass = {0};
	wndClass.cbSize = sizeof(WNDCLASSEX);
	wndClass.style = CS_HREDRAW | CS_VREDRAW;
	wndClass.lpfnWndProc = WndProc;
	wndClass.hInstance = hInstance;
	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wndClass.lpszMenuName = NULL;
	wndClass.lpszClassName = L"BookWindowClass";

	if(!RegisterClassEx(&wndClass))
		return -1;

	RECT rc = {0, 0, 640, 480};
	AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);

	HWND hwnd = CreateWindow(L"BoolWindowClass", L"Blank Win32 Window",
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
		rc.bottom - rc.top, NULL, NULL, hInstance, NULL);

	if(!hwnd)
		return -1;

	ShowWindow(hwnd, cmdShow);

	MSG msg = {0};

	while(msg.message != WM_QUIT)
	{
		if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	
	}

	return static_cast<int>(msg.wParam);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, 
	WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT paintStruct;
	HDC hDC;

	switch(message)
	{
	case WM_PAINT:
		hDC = BeginPaint(hwnd, &paintStruct);
		EndPaint(hwnd, &paintStruct);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd, message, wParam, lParam);
	}

	return 0;
}
Выдает ошибку: error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
L6go1as вне форума Ответить с цитированием
Старый 07.01.2012, 15:50   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы создавали консольный проект Win32.
а нужен просто проект Win32.

можете изменить тип проекта в настройках проекта.
но на будущее внимательнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 15:52   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Хм, а как изменить в настройках?
L6go1as вне форума Ответить с цитированием
Старый 07.01.2012, 15:59   #4
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

И второй вопрос, таки я и не увидел окошка, его нет, программа выполняется, но ничего не происходит, в чем может быть косяк?
L6go1as вне форума Ответить с цитированием
Старый 07.01.2012, 16:07   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Проект->Свойства: <имя проект>...->Свойства конфигурации->Компоновщик->Система->Подсистема->Windows.
НЕ забудьте что это нужно сделать для обеих конфигураций(Release и Debug, или сразу обеих(выбрав в окне свойств))

возможно дело в вашем цикле, я не помню чему равно WM_QUIT.
попробуйте цикл do while.
проверьте заходит ли внутрь цикла.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 07.01.2012 в 16:11.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 17:03   #6
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Косяк был в wparam, lparam ...
Единственынй вопрос остался по

wndClass.lpszClassName = L"BookWindowClass";

Без "L" строка не хочет восприниматься вообще.

Последний раз редактировалось L6go1as; 07.01.2012 в 17:08.
L6go1as вне форума Ответить с цитированием
Старый 07.01.2012, 17:14   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Проект ориентирован на Юникод окружение.
потому все функции которые принимают строки(искл те которые не имеют и Ansi и Unicode версии) хотят Юникод строки, аналогичное с структурами:
если вы указываете WNDCLASSEX, то вы на самом деле выбираете или WNDCLASSEXA или WNDCLASSEXW(в вашем случае вторая используется)
http://programmersforum.ru/showthrea...hlight=Unicode
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 17:44   #8
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Может я слепой, но в чем прикол, в первом случае - не работает, во-втором все ок:

Код:
HWND hwnd = CreateWindowA("BoolWindowClass", "Blank Win32 Window",
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
		rc.bottom - rc.top, NULL, NULL, hInstance, NULL);
Код:
HWND hwnd = CreateWindowA("BookWindowClass", "Blank Win32 Window",
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
		rc.bottom - rc.top, NULL, NULL, hInstance, NULL);
Просто взял "перепачатал" и заработало все, хотя ничего не изменилось.
L6go1as вне форума Ответить с цитированием
Старый 07.01.2012, 17:49   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может не та расскладка была?

ошибку то какую выдавал?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 17:51   #10
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Native' has exited with code -1 (0x0fffffff)


Что до раскладки, то вроде бы все по англичански ... хотя знаешь, больше всего на раскладку похоже...
После мои мучений в час вглядываний в код, у меня возник вопрос, а нет ли проверки для winapi, которая есть в c++, когда например пишешь не cout, а coud - последнее подчеркивается как ошибка?

Последний раз редактировалось L6go1as; 07.01.2012 в 17:54.
L6go1as вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает ехе файл в visual C++. В чем может быть ошибка? katya-vesnushka Visual C++ 1 08.11.2010 22:00
В чем может быть ошибка? nervniy БД в Delphi 2 21.10.2010 15:47
Ошибка "Acces violation" в чем может быть причина TRIZER Общие вопросы Delphi 2 02.05.2010 12:10
помотрите в чем может быть ошибка zizu Помощь студентам 2 26.04.2010 10:16
чем может быть вызвана эта ошибка doncova1 Общие вопросы Delphi 5 01.03.2007 11:15