error LNK2019
Код:
error LNK2019: unresolved external symbol "unsigned short __cdecl RegMyWindowClass(struct HINSTANCE__ *,char const *)" (?RegMyWindowClass@@YAGPAUHINSTANCE__@@PBD@Z) referenced in function _WinMain@16
Код самой программы:
Код:
#include <windows.h>
// объявление функций
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);
//////////////////////////////////////////////////////////////////////////
// функция вхождений программы WinMain
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// имя будущего класса
LPCTSTR lpzClass = TEXT("My Window Class!");
// регистрация класса
if (!RegMyWindowClass(hInstance, lpzClass))
return 1;
// вычисление координат центра экрана
RECT screen_rect;
GetWindowRect(GetDesktopWindow(),&screen_rect); // разрешение экрана
int x = screen_rect.right / 2 - 150;
int y = screen_rect.bottom / 2 - 75;
// создание диалогового окна
HWND hWnd = CreateWindow(lpzClass, TEXT("Dialog Window"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, 300, 150, NULL, NULL,
hInstance, NULL);
// если окно не создано, описатель будет равен 0
if(!hWnd) return 2;
//цикл сообщений приложения
MSG msg = {0}; //структура сообщения
int iGetOk = 0; //переменная состояния
while ((iGetOk = GetMessage(&msg, NULL, 0, 0 )) != 0) //цикл сообщений
{
//если GetMessage вернул ошибку - выход
if (iGetOk == -1) return 3;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
// функция обработки сообщений
LRESULT CALLBACK WndProc(
HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// выборка и обработка сообщений
switch (message)
{
case WM_LBUTTONUP:
// реакция на сообщение
MessageBox(hWnd, TEXT("Вы кликнули!"), TEXT("событие"), 0);
break;
case WM_DESTROY:
PostQuitMessage(0); // реакция на сообщение
break;
default:
// все сообщения не обработанные Вами обработает сама Windows
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
ATOM RegMyWindowClass(HINSTANCE hInst, LPSTR lpzClassName)
{
WNDCLASSEX wcWindowClass = {0};
//адрес ф-ции обработки сообщений
wcWindowClass.lpfnWndProc = (WNDPROC)WndProc;
//стиль окна
wcWindowClass.style = CS_HREDRAW|CS_VREDRAW;
//дискриптор экземпляра приложения
//название класса
wcWindowClass.hInstance = hInst;
wcWindowClass.lpszClassName = lpzClassName;
//загрузка курсора
wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
//загрузка цвета окон
wcWindowClass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
//регистрация класса
return RegisterClassEx(&wcWindowClass);
}
// объявление функций
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);
//////////////////////////////////////////////////////////////////////////
// функция вхождений программы WinMain
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// имя будущего класса
LPCTSTR lpzClass = TEXT("My Window Class!");
// регистрация класса
if (!RegMyWindowClass(hInstance, lpzClass))
return 1;
// вычисление координат центра экрана
RECT screen_rect;
GetWindowRect(GetDesktopWindow(),&screen_rect); // разрешение экрана
int x = screen_rect.right / 2 - 150;
int y = screen_rect.bottom / 2 - 75;
// создание диалогового окна
HWND hWnd = CreateWindow(lpzClass, TEXT("Dialog Window"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, 300, 150, NULL, NULL,
hInstance, NULL);
// если окно не создано, описатель будет равен 0
if(!hWnd) return 2;
//цикл сообщений приложения
MSG msg = {0}; //структура сообщения
int iGetOk = 0; //переменная состояния
while ((iGetOk = GetMessage(&msg, NULL, 0, 0 )) != 0) //цикл сообщений
{
//если GetMessage вернул ошибку - выход
if (iGetOk == -1) return 3;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
// функция обработки сообщений
LRESULT CALLBACK WndProc(
HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// выборка и обработка сообщений
switch (message)
{
case WM_LBUTTONUP:
// реакция на сообщение
MessageBox(hWnd, TEXT("Вы кликнули!"), TEXT("событие"), 0);
break;
case WM_DESTROY:
PostQuitMessage(0); // реакция на сообщение
break;
default:
// все сообщения не обработанные Вами обработает сама Windows
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
ATOM RegMyWindowClass(HINSTANCE hInst, LPSTR lpzClassName)
{
WNDCLASSEX wcWindowClass = {0};
//адрес ф-ции обработки сообщений
wcWindowClass.lpfnWndProc = (WNDPROC)WndProc;
//стиль окна
wcWindowClass.style = CS_HREDRAW|CS_VREDRAW;
//дискриптор экземпляра приложения
//название класса
wcWindowClass.hInstance = hInst;
wcWindowClass.lpszClassName = lpzClassName;
//загрузка курсора
wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
//загрузка цвета окон
wcWindowClass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
//регистрация класса
return RegisterClassEx(&wcWindowClass);
}
Какую библиотеку необходимо подключить или что изменить в свойствах проекта?
Единственное,что в глаза бросилось–это разница параметров в объвлении функций и их реализации.Посмотрите внимательнее
[COLOR="Gray"][SIZE="1"](хм,можно описывать функции только с типами в качестве параметров?)[/SIZE][/COLOR]
Как верно заметил @pixo $oft, не совпадают типы в объявлении и реализации функции. Нужно заменить LPSTR на LPCTSTR. После этого должно скомпилироваться. Только этого мало: в коде не хватает важных составляющих :).
To @pixo $oft
> (хм,можно описывать функции только с типами в качестве параметров?)
Можно.