Рейтинг:
6
Sergey Alexandrovich Kryukov
Во-первых, обратитесь: Точка входа-Википедия, свободная энциклопедия.
Ваш вопрос предполагает, что ваша забота-это возвращение int
ценность. Даже если это не так, знать, что он делает, - это хорошо.
Это в основном вопрос истории. Для функций начального уровня существует традиция возвращать 0 во всех случаях, кроме случаев аварийного завершения. Во всех (или почти во всех) ОС есть библиотеки, которые используются для проверки статуса процесса. Когда процесс завершается, ваш код может прочитать это значение из статуса. Кроме того, когда приложение выполняется синхронно в том или ином виде пакетного файла, команда запуска может вернуть это значение, которое может быть присвоено какой-либо переменной пакета / сценария, которая в дальнейшем может использоваться, например, для форк дальнейшее исполнение. В то же время это всего лишь традиция или культура, а не какой-то стандарт. Традиция возвращать 0 достаточно стабильна, а все остальные значения полностью зависят от приложения; если они необходимы, их можно описать в документации по конкретному приложению. Если использованная функция точки входа возвращает значение void, 0 все равно возвращается системе времени выполнения; это значение по умолчанию.
Со временем важность этой техники снижается; большинство приложений просто игнорируют возможность вернуть что-либо. Для этого есть две важные причины: структурная обработка исключений, затем графический пользовательский интерфейс и, в определенной степени, многопоточность. Ужасная техника возврата «статуса» из функции устранена; использовать это было бы просто глупо. Исключения намного мощнее. Обычно все приложения перехватывают все исключения во всех потоках и показывают гораздо более информативную диагностику проблем в самом приложении. Выбрасывание исключений в исполняющую систему, среду исполнения, относительно редко, используется только в простейшем приложении или указывает на низкотехнологичность. Более того, событийно-ориентированные UI-приложения (то есть почти все из них, если вы выбираете только достойные) улавливают все исключения в главном событии UI и сразу показывают диагностику проблемы.
—СА
Miguel Altamirano Morales
Большое вам спасибо, Сергей, и да, это хорошо и очень ценно-знать, что делает возвращаемое значение точки входа.
Моя очень подробная забота в том, что я делаю, заключается в том, чтобы знать правильный поток (или поток ?) выполнения этого приложения. Что мне нужно сделать, так это отобразить изображение, например полный портрет на экране, который должен появиться прямо перед первым диалоговым окном графического интерфейса. И я говорю GUI dialog, потому что теперь я вижу, что такого рода проекты не имеют windows forms.
Как вы и предполагаете, я не знаю, где отобразить этот портрет (PORTADA по-испански) или где включить его, чтобы он правильно отображался во время выполнения.
Miguel Altamirano Morales
Мне немного стыдно, потому что, возможно, я задаю очень наивный вопрос, особенно для таких людей, как вы, но, пожалуйста, поймите, что это мое самое первое свидание с родным проектом C++. Мне повезло, что я мог бы решить несколько вещей за две недели, но это становится все сложнее для меня с каждым днем. По крайней мере, я честно предупредил об этом своих клиентов.
Может быть, они наняли меня, потому что не могли найти никого другого, но я точно знаю, что получу то, что они хотят, мне просто нужно время для расследования.
Sergey Alexandrovich Kryukov
В этом вопросе нет ничего плохого. У нас есть много глупых вопросов, но они, как правило, глупы из-за логического противоречия, чаще всего неверных необоснованных предположений и неадекватных амбиций; другими словами, ложное знание глупо, но отсутствие знания-нет. Ваш вопрос не имеет ничего общего с этим; это естественно на определенном уровне обучения. Пожалуйста, не стесняйтесь спрашивать.
Вот в чем дело: ответ на ваш вопрос во многом зависит от 1) вашей конкретной платформы; 2) UI / графический фреймворк / библиотека, которую вы используете. Так что слишком подробный ответ не будет иметь смысла, пока вы не укажете это. Самый обычный подход таков: пользовательский интерфейс ориентирован на события; ОС предоставляет событие, используемое для обработки некоторого события отрисовки графики. Вы обрабатываете это событие, используете ссылку / указатель / обработчик графического контекста для рисования изображения или чего-то еще. ОС обеспечивает отсутствие избыточных вызовов. Например, если вы скрываете свое окно за каким-то другим окном или краем экрана, а затем показываете его снова, может сработать событие повторного рендеринга, но не при простом перемещении окна. Этот механизм может показаться слишком сложным, но это не так; это очень разумно и эффективно. Некоторые библиотеки могут делать это внутренне, поэтому вам нужно только поместить какой-нибудь объект в какой-нибудь контейнер, и тогда он будет отрисован. Кажется, это намного проще, но не обязательно лучше. Кроме того, современные библиотеки прозрачно используют аппаратное ускорение.
С этими намеками на фон вам нужно будет задать отдельный вопрос, как только вы предоставите необходимую информацию. Если вы хотите, чтобы я принял участие, пожалуйста, дайте мне ссылку на ваш новый вопрос, добавив комментарий к этому комментарию.
—СА
Miguel Altamirano Morales
Доброе утро, Сергей (сейчас 9: 14 утра в Мехико).
Платформа, с которой я работаю, - это Visual Studio 2010, приложение является родным C++, но я все еще не могу определить, что это за проект (если это MFC или Win32), но он генерирует файл .EXE, а не .DLL, хотя, похоже, у него есть классы MFC. Как я могу проверить это наверняка ?
О том, что вы просите для UI/graphics framework, я просто не знаю, Дайте мне посмотреть, смогу ли я решить эту проблему, и я вам расскажу.
Спасибо, Сергей.
Спасибо !!!
Sergey Alexandrovich Kryukov
Этого достаточно, спасибо.
В этой среде вы используете raw Windows API (возможно, с очень простой оболочкой MFC (см. документацию MFC: CImage), или комбинируя его с raw Windows API). Подход, который я описал в своем предыдущем комментарии, полностью применим. Роль обработчика событий играет ваш обработчик события WM_PAINT. Посмотрите документацию по этому событию и его обработке. См. также раздел методы Windows API Invalidate*..., для полноты картины.
Если вам нужна более подробная информация или вы не можете найти все концы, пожалуйста, напишите отдельный вопрос на отдельной странице вопроса. Вы можете дать мне ссылку на этот вопрос, комментируя этот комментарий; я постараюсь ответить быстро.
—СА
Miguel Altamirano Morales
Спасибо, я так и сделаю
Miguel Altamirano Morales
Это проект МФЦ, это факт.
Miguel Altamirano Morales
Вы не поверите: я уже решил проблему !!!.
Моя ошибка (Я считаю) заключается в том, что я думаю об этом приложении в терминах "потока" и "сети". Вы знаете: "где и когда я вставляю изображение".
Что я сделал, так это создал новое приложение с помощью мастера для проекта Win32 и увидел все файлы, которые он сгенерировал автоматически. Просмотрев их и "Readme. text", я получил хорошее представление о том, как это работает и что я должен считать точкой входа для приложения. Затем я заглянул в приложение, над которым работаю, и заметил, что это проект MFC, поэтому все зависит от файлов "nameofproject..h" и .cpp. Я только раскомментировал несколько строк, прокомментированных другим программистом, и включил заголовок и исходный файл для обработки класса.
Большое спасибо за вашу любезную поддержку, и я надеюсь, что мы сможем снова связаться, очень вероятно, что я продолжу исследования с помощью CodeProject, это очень ценный ресурс для программистов в процессе понимания, как я в этой конкретной теме (C++).
Благослови тебя Бог, Сергей.
Sergey Alexandrovich Kryukov
Добро пожаловать.
Удачи, звоните еще.
—СА
Рейтинг:
15
Jochen Arndt
С графическими приложениями Windows существует Точка входа WinMain (Windows)[^] (смотреть также Пошаговое Руководство: Создание Настольных Приложений Windows (C++)[^]). Это будет вызвано скрытым main
реализация функции, которая добавляется в вашу программу при построении.
При создании приложения MFC даже WinMain
реализация автоматически добавляется в вашу программу. Осуществление звонков InitInstance
из ваших CWinApp
производный класс, который затем является "видимой" точкой входа для приложений MFC.
Если вы собираетесь написать консольную программу Windows,вы должны реализовать основную функцию в стиле C/C++. Тем не менее, существуют специальные расширения Microsoft _tmain
и wmain
которые могут быть использованы вместо этого (они снова вызываются скрытой реализацией, которая обеспечивает преобразование между Unicode и многобайтовыми символьными строками). Смотреть также главная: запуск программы[^].
Miguel Altamirano Morales
Большое спасибо за ваш второй ответ, Йохен, он очень законченный. Я собираюсь увидеть на нем все. Вы хороший человек, и я вам очень благодарен.
Я не видел раздела ответа на этот ответ, поэтому посылаю вам это сообщение, ожидая, что вы сможете его увидеть.
phil.o
Сделав комментарий к своему ответу или ответив на существующий комментарий, автор автоматически будет предупрежден о вашем сообщении; сначала в верхней строке на этом сайте, а затем по почте, если пользователь активировал эту опцию.
Итак, вы правильно ответили на замечание Мистера Арндта.
Jochen Arndt
Спасибо вам за ваши отзывы и принятие решения.
Как уже сказал Фил. О, вы ответили на мой ответ. При быстром ответе на вопросы и решения кнопка просто называется "задать вопрос или комментарий".