Эта проблемка тут описывалась. В двух словах взял книгу В.Лаптева Экспрес курс там есть пример оконного приложения на WinAPI стр 425 (у кого есть книга могут посмотреть) набрал с чистого листа без проекта. Откомпилировалась. при запуске выдала — Unresolved external '_main' referenced from C:\BC5\LIB\C0X32.OBJ. смотрел статью — "Анатомия C Run-Time, или Как сделать программу немного меньшего размера
" Уже разобрался что нужно изменить точку входа на
WinMain() да вот только как это сделать в Borland'e я ни могу понять (Борланд с+ 5.02)
да еще этот код скопированый в "проект" заработал без проблем
но очень хочется "вручную". Просьба Визуал не предлагать нарисовать окно мышкой не интересно...
кидаю на всякий случай код мало ли еще ошибка гдето внутри...
з.ы. поиск в интернете ничего вразумительного не дал. а в книге не описано
искал где мог хелп!
// Даеж окна!
// листинг 13.3 стр 426
#include <windows.h>
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL RegClass (HINSTANCE hInst, WNDPROC WndProc, LPCTSTR szName);
//=====================================================================
int WINAPI WinMain ( HINSTANCE hI, // Хендля текусчая
HINSTANCE hP, // Хендля предыдущая
LPSTR lpszCmdLine, // параметры командной страки
int nCmdLine) // вид на икране
{
MSG msg; // саабщение (читай смска)
HWND hwnd; // "хендл-шмендл" окна
static char szClassName[]="FirstProgramm"; //
// Регистрация класса окна
if (!RegClass (hI, WndProc, szClassName)) return FALSE; // ФАЛСИ!!!
// создание ГЛАВНАГО АКНА
hwnd = CreateWindow (
szClassName, // имя класс окна
"ТАБЛИЦА УМНОЖЕНИЯ", // заголовок окна
WS_OVERLAPPEDWINDOW|WS_VISIBLE, // стиль окна
CW_USEDEFAULT, CW_USEDEFAULT, // координаты окна
CW_USEDEFAULT, CW_USEDEFAULT, // Размеры окна
0, // сирота (Родителя нет)
0, // меню нет
hI, // наш Хендл
NULL); // Дополнительно
if (!hwnd) return FALSE; // если не создалось - ВЫХОДИМ
ShowWindow (hwnd, SW_SHOWNORMAL); // показать окно
UpdateWindow (hwnd); // перерисовать окно
while (GetMessage (&msg, 0, 0, 0)) // цикл обработки сообщений
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
} // конец главноай функций
// ===========================================================
BOOL RegClass (HINSTANCE hInst, WNDPROC WndProc, LPCTSTR szName)
{
WNDCLASS wc; //
wc.style=CS_HREDRAW | CS_VREDRAW; // стиль окна
wc.lpfnWndProc=WndProc; // А. Функция окна
wc.lpszMenuName=NULL; // Б. меню нет!
wc.lpszClassName=szName; // фиксируем класс окна
wc.hInstance=hInst; // "хендл приложения"
// ЗАГРУЗКА РЕСУРСЕЙ
wc.hIcon=LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor=LoadCursor (NULL, IDC_ARROW);
//
wc.hbrBackground = (HBRUSH)GetStockObject (LTGRAY_BRUSH); //класс окна
wc.cbClsExtra = wc.cbWndExtra =0;
return (RegisterClass (&wc)!=0); // РЕГИСТРАЦИЯ
}
// ============================================================
LRESULT CALLBACK WndProc (
HWND hwnd, // "хендл" окна
UINT msg, // идентификатор сообщения
WPARAM wParam, // дополнительный параметр
LPARAM lParam) // дополнительный параметр
{
switch (msg)
{
case WM_CREATE: // Создается окно
MessageBox (hwnd, "Сообщение WM_CREATE", // заголовок
"Начало!", // сообщение
MB_OK|MB_ICONWARNING); // значек (!)
return 0;
case WM_LBUTTONDOWN: // нажата левая княпка мыхи
MessageBox (hwnd, "Сообщение WM_LBUTTONDOWN ", "Выполняем!",
MB_OK|MB_ICONINFORMATION); // значек (i)
return 0;
case WM_DESTROY: // уничтожаем окно
MessageBox (hwnd, "Сообщение WM_DESTROY", "ЭТО Конец!",
MB_OK|MB_ICONQUESTION); // значек (?)
PostQuitMessage (0); // послали WM_QUIT
return 0;
}
//другие сообщения не обрабатуем! ё!
return DefWindowProc(hwnd, msg, wParam, lParam);
}
Здравствуйте, shvellerr, Вы писали:
S>Уже разобрался что нужно изменить точку входа на WinMain() да вот только как это сделать в Borland'e я ни могу понять (Борланд с+ 5.02)
Зачем это? Тебе нужно указать компилятору, что он должен создавать программу для Windows, примерно так:
C:\>bcc32 -tW a.cpp
a.cpp — это имя файла с исходным кодом. Это во-первых. Во-вторых (а даже скорее в-нулевых
) — Борланд C++ 5.02 для написания программ под современные ОС мягко говоря плохо подходит... Оно и не удивительно, ведь в 1997 году все было несколько не так
Возьми что-то более современное
S>да еще этот код скопированый в "проект" заработал без проблем но очень хочется "вручную". Просьба Визуал не предлагать нарисовать окно мышкой не интересно...
А посмотреть какие менеджер проектов ключи компиляции и линковки делал какая религия не позволяет?
Здравствуйте, shvellerr, Вы писали:
S> при запуске выдала — Unresolved external '_main' referenced from C:\BC5\LIB\C0X32.OBJ.
У тебя собирается консольное приложение.
S> Уже разобрался что нужно изменить точку входа на WinMain() да вот только как это сделать в Borland'e я ни могу понять (Борланд с+ 5.02)
Ну как в коде изменить — я так понял, ты понял — руками
Сделай проект и укажи что это виндовое приложение. Либо MAK-файл. Либо руками вызывай линкер с правильными параметрами.
---
PS. И выкинь этот 5.02. Я до сих пор вздрагиваю, когда вспоминаю его компилятор. Рекомендую юзать Free C++ Compiler (который из BCB5) — мелочи тянет без проблем. Для крупных проектов прийдется заюзать линкер от старших версий.
PSS. На вижуале не обязательно рисовать мышкой.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Dzirt2005, Вы писали:
D>Зачем это? Тебе нужно указать компилятору, что он должен создавать программу для Windows, примерно так:
D>D> C:\>bcc32 -tW a.cpp
D>
Спасибо большое заработало
. На счет Борланда вы правы старый но учится можно у меня по нему просто литература есть
я ток учусь