![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Мне сегодня задали такой вопрос.
Как запихнуть функцию WinMain (или просто Main) в класс. Например, класс апликейшн. В коде программы мы вызываем метод run, а он в свою очередь WinMain - но как это реализовано и можно ли этот фокус повторить вручную Я даже не представляю, а вы? -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Из процедуры на асме - изи
-------------------- С уважением, А. Фролов. |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Ну и вчем судь процедуры. Сам процесс Как выглядит структура программы -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Насть, посмори, как енто в MFC сделано...
з.ы. не уверен, что енто там в классы засунуто... посмори всякие макросы BEGIN_MESSAGE_MAP, END_MESSAGE_MAP -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Nastya если ты работашь в ВС то просто составь любое приложение и вместо запуска нажми Ф10 и ты сразу попадеш в винмаин, пошаговое выполнение функций и ты поймеш, как и что работает.
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Что-то не въехал в вопрос. Это наоборот обычно - из WinMain вызывается какая-то ваша процедура или метод класса. Ведь что такое WinMain? Это функция, условно говоря, входная точка в программу. То есть, вот вы запускаете exe-шник. Какой код система должна начинать исполнять? Очень просто - в файле exe есть заголовок, по определенному смещению которого находиться адрес входной точки. В этот адрес система и передает управление. Кто же записывает туда этот адрес? Естесственно компилятор, а точнее линковщик. Вы можете в опциях линкера указать, входную точку, то есть функцию, которая и будет вызыватся самой первой. Можно ли сделать ее методом класса? Теоретически можно попробовать, практически - возможно сработает со статическими методами. Есть такой фактор, как декорация имен, в результате которого в откомпилированном файле имена методов могут быть изменены и линкер их просто не найдет (если вы, конечно, не укажате измененное имя). Набор параметров также может являть проблему (указатель на экземляр класса для не статического метода). Потом надо помнить, что, на самом деле, чаще всего, WinMain не является входной точкой. Существует такой модуль как RTL (Run-Time Library), называемый чаще CRT и вот в нем находиться функция, которая и является входной точкой. В CRT от VC существует две такие функции - mainCRTStartUp и WinMainCRTStartUp (точнее, два модуля), которые соответсвенно вызывают функции main и WinMain, но перед этим проводят необходимую инициализацию (инициализация хипа, глобальных переменных и т. п.). Если вы установите свою точку входа, то вы лишитесь этой инициализации.
-------------------- Волны гасят ветер... |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Вообщем, путем всяческих ухищрений, такое сделать можно.
Хотя это достижение будет мало кого волновать, потому как никому такое не надо. Самый главный вопрос - ЗАЧЕМ ? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |