Зачем в программе процедура окна, если она ни разу не вызывается?

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 16 дек 2008.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Ну я знаю, что это прототип. И она для WinMain есть и я его вижу. А для WndProc нет! И для WindowProc нет!
    А WinMain и WndProc то разные сущности для этой программы! И объявляя прототип для одной, это не значит автоматически, что мы объявляем прототип и для другой! Не знаю, зачем Вы этот прототип написали, я его и так вижу в тексте программы. Извините.

    ...Что значит прототип не нужен? То есть я высказал там выше предположение, что он не нужен, но теперь я окончательно запутался уже.
    ...Я не могу дальше читать. Всё, третья глава. Ктоназовёт мои вопросы глупыми, пусть плюнет мне в лицо. А ещё мне непонятно, откуда там взялось SW_SHOWDEFAULT (четвёртый аргумент WinMain). Прошерстил подключаемые файлы- нет его. Но он в вызове функции именно как SW_SHOWDEFAULT, а не как число. Где он инициализирован? Да много чего непонятно.
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Вот же ж упертый!
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    это константа (смотри windows.inc) - переводить в число будет компилятор на стадии компилирования кода
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    для твоей программы абсолютно пофиг, какие прототипы у этих функций и как они называются. Ты их не вызываешь. А для ВИНДОВС важно только то, чтобы функция, указанная в wc.lpfnWndProc, имела правильный формат и не более того. Имя абсолютно не важно. Виндовс вызывает эту функцию не по имени. Более того, в коде не будет ни одной ссылки на имя функции (если конечно ты не будешь ее экспортировать).

    Я бы советовал тебе сесть и еще раз внимательно все прочитать. У тебя сейчас очень много... эм... глупых... вопросов. Ты сейчас даже сути программирования на ассемблере не понимаешь. Почитал бы для начала Калашникова, Юрова, Зубкова...
     
  5. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    http://www.rapidshare.ru/861822
    Во это ссылка на файлообменнике. Там- файл windows.inc И в нём нет SW_SHOWDEFAULT. Вопрос-то прост: откуда Windows знает, что вместо SW_SHOWDEFAULT надо написать некоторое число?
    ...Если я буду тех авторов читать, мне рано или поздно скажут: читай эти туториалы. Проверено
     
  6. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    amvoz
    В параметре wc.lpfnWndProc ты указываешь винде адрес, который она должна будет вызвать, затолкнув перед этим в стек 4 DWORD'a. Имя функции существует только в исходнике, в скомпилированном файле его нет.
    Ты просто указаваешь какая функция в программе будет вызываться. Эта функция должна вытаскивать из стека 4 DWORD'a.
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    amvoz
    Не знаю, что у тебя за windows.inc, в моем например SW_SHOWDEFAULT в строке 2584
    Код (Text):
    1. ...
    2. SW_RESTORE                           equ 9
    3. SW_SHOWDEFAULT                       equ 10
    4. SW_MAX                               equ 10
    5. ...
    Не Windows, а компилятор во время компилирования.
    В скомпилированном файле есть только числовые значения.
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Windows ничего не знает. Знает компилятор. Все имена функций, переменных, констант - только для компилятора. Виндовсу на них по барабану. Если програма компилируется, значит эта константа где-то определена.

    В твоем случае это строка 2584 в выложенном тобой файле.
     
  9. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    K10, Partner, по-моему, тут клинический случай. ТС, не обижайся, но ты бы почитал книги, которые я назвал. И заглянул бы в отладчик пару раз.
     
  10. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    MSoft
    Я сегодня добрый и терпеливый как никогда. Сам удивляюсь :)
     
  11. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Проклятый поиск... И ведь ни разу не давал сбоев! Удалось найти только после переименования, в windows.txt!
    ...Ну, про оконную функцию я понял. Это симбиоз какой-то API-функций и авторских. От API в ней то, что чётко прописано где-то там, внутри: принимает 4 аргумента, каждый такого-то типа. Главное- размер. Не имя, естественно. И баста. Поэтому и прототип не нужен. А от авторской то, что тело функции- пишем сами. Так и сказано: "Вы будете тpатить большую часть вашего вpемени на написания обpаботчиков событий." И на автора тоже грешить язык не поворачивается- и не посетовать нельзя- нет, чтобы написать так! Понятно и лаконично!
    ...Так-то всё понятно, всем спасибо, устал я за сегодня.
     
  12. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    размер чего, позвольте спросить???
    а это что такое?
     
  13. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Рановато вам, молодой человек, програмировать. Сначала нужно выйти хотя бы на уровень продвинутого юзера.
     
  14. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    А я так-то может и не обратил на этовнимание, но в комментарии к тому туториалу (см. первую ссылку) какой-то парень поставил вопрос- где прототип для оконной функции? Так что не я один такой глупый. И не в жизнь бы мне самому не догадаться, что мы её не вызываем, а вызывает машина. А в отладчике я работаю, сейчас вотглава 11-12, с главы на главу скачу, изучаю точки останова. Что там... По телу программы всё понятно... По адресу 401118 первая инструкция оконной функции, первый вызов этой функции из адреса 77D38706, перед ним- код, очень похожий на то, что в стек кладутся 4 аргумента... Так что зря Вы... Но это всё на уровне догадок только, а я хотел подтверждение услышать.
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ну да, приятно осознавать, что
    :)
     
  16. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Суммарный размер всех аргументов
    ...А вы убедились значит, что тот парень тоже такой вопрос задал? Я бы другой вывод сделал- что это действительно непонятно! Впрочем, Бог вам судья.
     
  17. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    бред
    значение имеет только количество аргументов, а не их суммарный размер. Какого бы типа не был параметр, он займет ровно 4 байта в стеке - ни больше, ни меньше
     
  18. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Я это и имел ввиду. Вопрос, он , кстати мне в голову не приходил, я только сейчас над ним задуммался: Зачем в прототипе пишут
    WinMain proto :lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD

    ...Писали бы:
    WinMain proto :4

    Ну это ладно, шутки всё. Программированием как таковым я давно не занимаюсь, месяца 2 уже. Раньше изучал С. Да, там было, где разгуляться... Там было непосредственно программирование. Циклы, условия всякие и так далее. И это мне нравилось и это у меня получалось. То, чем ясейчас занимаюсь... Скорее изучение Windows путём OllyDbg, MASM и других инструментов. Затрудняюсь назвать даже.
    ...Блин, в этой указанной программе ни рекурсии, ни вложенных циклов, ничего. Мат в один ход. Только надо угадать, где какие фигуры стоят... Но угадывать, где какие фигуры стоят- не задача ведь шахматиста, верно?..
    Хотя это тоже нужно и полезно знать.
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    amvoz
    Рассуждаете, как ребёнок. Выучили if, for и рекурсию и думаете, что всё? Типа это верх программерского мастерства, и больше Вам знать ничего не нужно, а остальное - это логическое мышление? СЧАЗЗЗ! Всякие детские игрушки типа расставить восемь ферзей на доске, найти выход из лабиринта, заданного массивом, и т.п. - это, конечно, неплохо на досуге. Но в реальных задачах нужно немерянное количество знаний, и на одной логике (если она вообще имеется) далеко Вы не уедете. А такие азы, как создание окна, наполнение его элементами управления, организация и обработка очереди сообщений — это только начало.
    Программирование не ограничивается тремя операторами. И при этом остаётся тем самым программированием в чистом виде. Так что НЕТ, распознать фигуры - это именно задача шахматиста. А фигур на самом деле столько, что Вам придётся развить воображение, чтобы только представить их количество.
     
  20. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    640
    Ну, вообще-то я так и думал. Как Вы сказали? Как ребёнок? Да, как ребёнок.
    ...Наверное, в языках более высокого уровня (тот же С, там поменьше таких низкоуровневых задач. Хе, не приходит же в голову писать окно cmd на С. Там ведь как:... я забыл уже. Но компилируешь, жмёшь F9 и наблюдаешь в окошке, неизвестно кем нарисованным исполнение твоей программы.)
    С- чистой воды логика.
    ...Хотя и там знаете, случались нештатные ситуации. Например, русский текст в консоли. И получалось то, о чём Вы говорите. Логику в сторону и изучение. Поиск, штутдирование литературы и так далее. Но таких ситуаций мало было. Много меньше.
    В Pascal, тот повыше будет- не приходилось функции для конкан... дя склеиания строк писать.
    Так что вот так вот. Есть выход, кого это не устраивает. Даёшь языки высокого уровня...