Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 113
от 02.08.2005, 22:40

Администратор:Калашников О.А.
В рассылке:Подписчиков: 254, Экспертов: 24
В номере:Вопросов: 1, Ответов: 2


Вопрос № 24134: Здравствуйте уважаемые эксперты. Я учусь программировать на WinApi использую для этого среду Borland C++ 5.02 Так вот при компиляции примера Линкер(или как там его) не может найти точку входа. (пример из книги П.В Румянцев "Азбука програ...

Вопрос № 24.134
Здравствуйте уважаемые эксперты. Я учусь программировать на WinApi
использую для этого среду Borland C++ 5.02 Так вот при компиляции примера Линкер(или как там его) не может найти точку входа.
(пример из книги П.В Румянцев "Азбука программирования в Win32 Api")
Как сделать чтобы он ее нашел? Или совет в каком направлении искать (без шуток ;-))

#include <windows>

LRESULT CALLBACK HelloWorldWndProc(HWND,UINT,UINT,LONG);
int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
WNDCLASS WndClass;
MSG Msg;
char szClassName[]="HelloWorld";
/*Регистрируем создаваемый класс*/
/*заполняем структуру WNDCLASS*/
WndClass.style="CS_HREDRAW" | CS_VREDRAW;
WndClass.lpfnWndProc = HelloWorldWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = szClassName;

if (!RegisterClass(&WndClass))
{
MessageBox(NULL,"Cannot register class","Error",MB_OK);
return 0;
}
hWnd = CreateWindow(szClassName,"Programm No 1",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL,
hInstance, NULL);
if (!hWnd)
{
MessageBox(NULL,"Cannot create window","Error",MB_OK);
return 0;
}
/*Show our window*/
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);

/*Beggining of messages cycle*/
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

LRESULT CALLBACK HelloWorldWndProc(HWND hWnd, UINT Message,
UINT wParam, LONG IParam)
{
HDC hDC;
PAINTSTRUCT PaintStruct;
RECT Rect;
switch(Message)
{
case WM_PAINT:
hDC = BeginPaint(hWnd,&PaintStruct);
GetClientRect(hWnd,&Rect);
DrawText(hDC,"HelloWorld",-1,&Rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd,&PaintStruct);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Message,wParam,IParam);
}
Отправлен: 28.07.2005, 00:31
Вопрос задал: Калашников Андрей Валерьевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: John Freeman
Здравствуйте, Калашников Андрей Валерьевич!
1) Это пример НЕ ПРОГРАММЫ, а оконной процедуры
2) чтобы её использовать надо создать окно и задать ему оконную процедуру, эту самую(читай дальше или возвращайся чтобы узнать как это делать)
3) так как в этом коде нет функции main(все программы на c начинают исполняться с main), то компилятор и ругается ясное дело
---------
You're trying to take me They trying to make me This is the only Gives me the only thing Tired of lying, I'm tired of lying The only thing I inderstand is what I feel...
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 28.07.2005, 12:07
Оценка за ответ: 2
Комментарий оценки:
Почему же не программа? Как пишут дяди в книжках: Программа для Windows состоит из функции WinMain(), цикла обработки сообщений и оконной функции(процедуры). Вроде все на месте. А main() это точка входа для программ MS-DOS и с ней окно не нарисуешь(без ударного труда).
Вывод: пункт ответа
№1:=false;//т.к это все же программа
№2:=false;//окно создается
№3:=false;//main() для DOS, WinMain() для windows.
Решения проблемы в ответе нет. Без обид.

Отвечает: Raptor1
Здравствуйте, Калашников Андрей Валерьевич!
У меня ваш пример запустился сразу при помещении его в пустой проект (VC6, Win32 application) так что вам надо смотреть в сторону опций вашего компилятора, у меня его нет поэтому сказать точнее не могу.
Ответ отправил: Raptor1 (статус: 5-ый класс)
Отправлен: 30.07.2005, 10:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Я с полдня помучил компилятор. И в результате проект запустился.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.winapifaq
Отписаться
Вспомнить пароль

В избранное