Форум: "Потрепаться";
Текущий архив: 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