Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Каа-то странно реагирует минимальное Win32приложение на сообщения   Найти похожие ветки 

 
KSergey   (2003-01-09 12:03) [40]

Николай Быков © (31.12.02 16:25)
так там написанно #include <windows.h> (подумайте теперь почему вы не это видите)

А почему кто-то должен еще о чем-то думать? Не видно=нету. А все остальное - кривость рук сайтостроителя.
На будущее совет: для простоты выкладывайте такие дела с расширением txt или прямо cpp - тогда никто их преббразовывать не будет и будет всем проще.
Впрочем в данном случае писать ваш пост было дольше, чем поправить свою же оплошность.

> Николай Быков © (09.01.03 10:25)
> он выдает такие же ошибки и предупреждения

Если бы вы потрудились еще раз спросить конкретно об ошибках и предупреждениях - было бы существенно проще помочь. А так я сейчас даже не смог за вашими многотрудными попытками всех облаять найти хоть одну ошибку, выданную компилятором.
Неужели обосрать всех полезнее, чем уточнить вопрос в том месте, куда вас ткнули носом? Я вообще поражаюсь вашей позицией вечно обиженного и попытками самоутвердиться в собсивенных же глазах. Зачем? (этоне вопрос! не надо на него отвечать!! Это факультативное домашнее задание!!!)


 
Сатир   (2003-01-09 14:51) [41]

2 НБ
Предсказание: тебе дорога на Большую Сцену в области написания юмористических призведений на злободневную тему из жизни начинающих шКодеров (шКодер - индивидуум, желающий стать великим программистом лёгким путём(за короткий период времени), чтоб сразу рубить со своего ремесла не кислую капусту).

С Новым Годом


 
p77   (2003-01-09 21:43) [42]

Ув. Николай Быков (ака Иришка;))!
Я Вам посылал кучу книг по С/С++ по мылу, а Вы даже не удосужились мне ответить. Ни мне спасибо, ни тебе досвиданья:). Хоть бы спасибо сказали. Я ведь не знаю - дошло ли до Вас. Некрасиво с Вашей стороны.
С уважением.


 
Николай Быков   (2003-01-10 04:44) [43]


> KSergey © (09.01.03 12:03)

Ой.
Тут просто недалеко ветка была, где я даже скриншот (17Кб) того, что мне выдается вывесил.
Запамятвовал, что это другая ветка.
http://freeprogrammer.narod.ru/tmp.bmp - скриншот
http://freeprogrammer.narod.ru/1.html - исходник


> Darts (09.01.03 11:08)

Честно говоря, я не проследил за ходом мыслей в этом посту(е).
Если вы говорите: "Borland C++ 5 это круто", то мой ответ:"Он выдает абсолютно то же самое, что и тот консольный"
Если вы говорите: "Borland C++ 5 - must die", то мой ответ: "Ну я и поставил себе VC++7"
Тогда на фоне этого непонятно, > Не понимаю, зачем ставить таких монстров, как VC++ 7 или
> VC++ 6 ради забав с WinAPI?

_______________________________________________________________
т.к. уже много кто забыл про тему ветки, то в кратце расказываю:
1) Консольный компилятор. Компилирует, но на .ехе файл Windows говорит, что это не Win32-приложение
2) Borland C++5,02 раньше компилировал нормально, но получаемое окно ничего не делало при попытках свернуть/развернуть/закрыть и пр. ("Как-то странно <...> на сообщения Windows")
3)Затем Broland C++5.02 и Borland C|C++ Free Compiler 5.5 сравнялись. Оба вадют одно и то же (см. скриншот) и отказываются компилировать


 
KSergey   (2003-01-10 08:24) [44]

Читаю картинку.
Ну во-первых, он компилирует. На эти предупреждения можно смело закрыть пока глаза. Просто переведите их - и станет понятно, что это не страшно.
А ошибка происходит на этапе линковки. Это существенно. Мне сейчас лень описывать что это значит, в свое время я тоже долго врубался.
Ошибка проста: не могу найти ф-цию main(), на которую есть ссылка в файле C0X32.obj (это библиотечный файл) (подчерк перед main - это стандартизованная приписка компилятора Си).
О природе происхождения ошибки могу предположить следующее: компилятор предполагает, что вы делаете стандартное консольное приложение (не Win), и соотв. подключает библиотеки для консольного приложения. А они предполагают наличие стартовой ф-ции main, а не WinMain. Ну и не находя ее линковщик ругается, понятно. Предполагаю, что в опциях компилятора/линковщика надо какой-то ключик указать, что приложение вообще-то Win. Но какой - не подскажу, не знаю. В IDE это настраивается соотв. переключателем в опциях проекта - потому я и советую плюнуть на компилятор командной строки: для начинающего все эти тонкости - китайская грамота, вы в них просто утоните ни за что ни про что.
В IDE советую начать с создания нового пустого проекта "Win 32 App", куда просто вставить этот текст, т.к. если вы сейчас попытаетесь прямо этот файл куда-то вставлять, то возможно придется настроить опции проекта, что вообще-то не на много проще параметров командной строки. А так среда сама нормально все настроит. Я же говорю, что все не так-то уж и просто в подготовке необходимых файлов для компиляции и линковки Win приложения (не сложно, но надо знать, методом тыка это точно не пробить).

И еще. А откуда вторая строчка "ilink32 1.obj"? Это вы ее ручками вводите? Напрасно. Линковщик у вас и так запускается. Автоматически. Почитайте выводимые сообщения. А вот этой строчкой вы, скорее всего, как раз и делаете exe-файл, структура которого отфонарная, что не удивительно. По идее, если все нормально (без ошибок), exe-файл должен создаться и первой командой.

А вообще - ну возьмите наконец книжки по Си и созданию приложений для Win32. Скорее всего там будет описана методика компиляции в какой-либо среде. Просто так тыкаться - абсолютно не производительно. Да и с языком не плохо бы ознакомиться.

Ну а как компиляция пойдет или появяться новые конкретные вопросы - размещайте в эту ветку - будем смотреть дальше что там и как.


 
Николай Быков   (2003-01-10 08:52) [45]


> KSergey © (10.01.03 08:24)

Попытка №n скомпилировать. (пробоваю добавить ключик -tW)
УРЯЯЯЯЯ!!!! СДЕЛАЛСЯ ехе-шник!!!!
РАБОТАЕТ!!!!!!!!!

//=====

Вот черт! Та же самая проблема.
Ни свернуть/развернуть/закрыть/изменить_размер/переместить.
Вот у меня то же самое и с IDE получалось.
Можете помочь?


 
KSergey   (2003-01-10 10:11) [46]

Выложите текущий .cpp-файл (сам по себе с расширением cpp!!) где-либо и дайте ссылку. Или сюда без урезок! (сюда навеное даже лучше). В приведенном вами тесте я не вижу проблем. Подозреваю, что они есть в текущей версии компилируемого вами файла.


 
Николай Быков   (2003-01-10 11:08) [47]

он только не .cpp а .c

#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[]="HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
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 = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);

hwnd = CreateWindow(
szAppName,
"The Hello Programm",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0));
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(iMsg)
{
case WM_CREATE:
PlaySound("c:\windows\media\tada.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello Windows 95", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}

Вот. Именно его и компилировал.

> В приведенном вами тесте я не вижу проблем

Вот у меня такое часто бывает. Однажды долго мучался над таким приложением (попытался самостоятельно перевести на паскаль пример из книги). Оказалось все просто - я lParam и wParam делал не longint а word :-)
Винда (98ВИ)вылетала с синим экраном.


 
Николай Быков   (2003-01-10 11:09) [48]

Причем, что самое странное, если перевести это же самое на паскаль и откомпилировать, то все работает
:confused:


 
Николай Быков   (2003-01-10 11:28) [49]

вот тут то, что вылазит из компилятора
http://freeprogrammer.narod.ru/1.exe (надеюсь, чьто народ не испортил его)


 
KSergey   (2003-01-10 11:40) [50]

О, блин...
Я же говорил: читайте внимательно книги! Си требует большего внимания от программиста.
Я уже начал тихонько офигевать наблюдая описанный вами эффект при компиляции даной вами программы... Но таки ошибочка нашлась ;) Через минут 20 примерно.
Вот как бы вам ее показать? Так, чтобы тоже помучались? ;) Наверно приведу правильный текст (вернее тот, который не имеет описанного эффекта не реагирования на ошибки, т.к. вообще-то любой текст программы правильный, а то, что она делает не то, что хотелось - это не к программе претензии; она от этого правильной быть не перестает, при условии ее компилируемости), а вы попробуйте ошибку найти. Только найдите, ладно? а не просто скопируйте мой текст. Ну и сюда результат ;)


 
KSergey   (2003-01-10 11:42) [51]

Вместо

...не имеет описанного эффекта не реагирования на ошибки...

читать

...не имеет описанного эффекта не реагирования на сообщения...

А она ведь и правда не реагировала ;)


 
Игорь Шевченко   (2003-01-10 11:44) [52]

Упс!
И я ошибку увидел :-)))


 
Николай Быков   (2003-01-10 11:45) [53]

сейчас поищю -)
(а куда это вы текст уже выложили? или в том посте очепятка?)


 
KSergey   (2003-01-10 11:46) [54]

А теперь текст:

Добавленная строчка include не считается, прсто удивительно как она без этого у вас компилировала впрочем в разных компиляторах возможно есть разные умолчания (в Mmsystem.h описан прототип ф-ции PlaySound). А может windows.h слегка разный - не знаю. Короче это не та ошибка, о которой идет речь. Если бы все так было просто - я бы сразу так и написал ;)

#include <windows.h>
#include <Mmsystem.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[]="HelloWin";
HWND hwnd;
MSG msg;
WNDCLASSEX wndclass;

wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
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 = szAppName;
wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

RegisterClassEx(&wndclass);

hwnd = CreateWindow(
szAppName,
"The Hello Programm",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch(iMsg)
{
case WM_CREATE:
PlaySound("c:\\windows\\media\\tada.wav", NULL, SND_FILENAME | SND_ASYNC);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Hello Windows 95", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd, iMsg, wParam, lParam);
}



 
Игорь Шевченко   (2003-01-10 11:46) [55]

А вот если еще и updatewindow убрать, будет совсем интересно :-))


 
Игорь Шевченко   (2003-01-10 11:48) [56]

В изначальном тексте, естественно :-)


 
KSergey   (2003-01-10 11:52) [57]

> Игорь Шевченко © (10.01.03 11:44)
> Упс!
> И я ошибку увидел :-)))

Интересно, попытками компилировать или просто вчитываясь в текст? Я бы. пожалуй, так просо не нашел. Хотя, если бы внимательно вгляделся в спокойной обстановке...

Будет обидно, если для поиска применится fc. Хотелось бы чтобы ручками-глазками ;)


 
KSergey   (2003-01-10 11:53) [58]

Одним словом все замерли в ожидании ;) (извините за издевательский тон)


 
Николай Быков   (2003-01-10 11:56) [59]


> KSergey © (10.01.03 11:46)

Вот я когда перечитывал, то тоже обратил внимание на точку с запятой после while.
а модули windws.h видимо разные, т.к. на паскале тоже надо MMSystem.pas включать.

А почему не выдалось ошибки? Ведь я не по правилам написал же? Там же нельзя ставить точку с запятой.....


 
KSergey   (2003-01-10 11:59) [60]

Враки, можно
Иначе бы не компилировалось ;)
Объяснять не буду, читайте книжки

Стоит отметить, что различия вы нашли быстрее, чем я эту маленькую точку с запятой ;)


 
Николай Быков   (2003-01-10 12:02) [61]


> KSergey © (10.01.03 11:59)

Да я не по тексту. Я свой(ну который 1.с)прочитал. Сравнил с switch. Задумался. Пришел к противоречию: "Как же так можно..."
Посмотрел ваш текст. Опасения подтверлдились.
Какой смысл имеет эта точка с запятой спрашивать не буду (догадываюсь). Лучше книжку прочитаю :-)


 
Anatoly Podgoretsky   (2003-01-10 12:03) [62]

Николай Быков © (10.01.03 11:56)
Почему нельзя, можно, все в пределах правил.


 
Игорь Шевченко   (2003-01-10 12:04) [63]

KSergey © (10.01.03 11:52)

Скачал, запустил, удивился. Посмотрел текст - понял.

С уважением,


 
Николай Быков   (2003-01-10 12:06) [64]

еще вопрос (офтопик):
А почему .ехе такой жирный получается? На C# всего 8kb был. Зато, правда, 10Mb оперативки жрал, собака.


 
KSergey   (2003-01-10 12:07) [65]

> Игорь Шевченко © (10.01.03 12:04)
> KSergey © (10.01.03 11:52)
> Скачал, запустил, удивился. Посмотрел текст - понял.

Я, сказать по-правде, вначале с дуру кинулся перепроверять все параметры всех ф-ций, заполнение структур, а дело было вовсе и не в этом ;)


 
KSergey   (2003-01-10 12:10) [66]

> Николай Быков © (10.01.03 12:06)
> еще вопрос (офтопик):
> А почему .ехе такой жирный получается? На C# всего 8kb был.
> Зато, правда, 10Mb оперативки жрал, собака.

Это вопрос к стандартным библиотекам и опциям линковщика, отчасти - компилятора.


 
Darts   (2003-01-10 12:13) [67]

> А почему .ехе такой жирный получается? На C# всего 8kb был.

Смотри пост от Darts (09.01.03 11:08)

Минимальное приложение для BСС начинается с 45 Кб. аналогичное приложение на FPC (паскале!!!) весит 15 кб.

> На C# всего 8kb был. Зато, правда, 10Mb оперативки жрал, собака.

RunTime library, панимаэшь, залжэены в NET. Вах, вах, покупай оперативки поболее. Новые технологии требуют большой памяти. Эволюция по восходящей.


 
Игорь Шевченко   (2003-01-10 12:22) [68]

Дался вам этот размер и занимаемая память! :-)
Детский сад, ей-богу. Песочница.


 
p77   (2003-01-11 19:39) [69]

Николаша,Вы читали мой вопрос к Вам в этой ветке?


 
Николай Быков   (2003-01-11 21:22) [70]


> p77 © (11.01.03 19:39)

ко мне? imho он был адресован какой-то Ире....это ваша знакомая?


 
Rouse_   (2003-01-11 22:00) [71]

А что проблема еще не решена? Вот это да :) две недели из-за 30 строчек сишного кода, это супер. Получается практически как в анекдоте:

Я уже два года работаю с Windows и ни разу его не переустанавливал. Он у меня ни разу не повис, не глюкнул. Я никогда не видел синего экрана, я рыдаю !!! Доктор, Подскажите, что я делаю не так?

Желаю успехов


 
Николай Быков   (2003-01-12 08:35) [72]


> Rouse_ © (11.01.03 22:00)

1) Проблема уже давно решилась (см. выше)
2) Там 80 строчек ;-)



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.61 MB
Время: 0.01 c
1-96855
Сергей К.
2003-01-17 19:25
2003.01.30
Как сделать, чтобы прога создавала ехе-шник.


14-96946
Driverrr
2003-01-12 11:56
2003.01.30
?


4-97099
vasa
2002-12-17 02:02
2003.01.30
Окно верхнего уровня от дочернего окна..


14-97004
dimich1978
2003-01-13 15:49
2003.01.30
Да...а скачиваний то сколько?


1-96868
No_V_Ice
2003-01-21 11:25
2003.01.30
PopupMenu в стиле XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский