Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WinMain и классы, Как запихнуть эту функцию в класс 
:(
    Опции темы
Nastya
  Дата 17.2.2003, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Мне сегодня задали такой вопрос.
Как запихнуть функцию WinMain (или просто Main) в класс.

Например, класс апликейшн.
В коде программы мы вызываем метод run, а он в свою очередь WinMain - но как это реализовано и можно ли этот фокус повторить вручную confused.gif?

Я даже не представляю, а вы?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Alex101
Дата 17.2.2003, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: нет
Всего: 10



Из процедуры на асме - изиsmile.gifsmile.gifsmile.gif.


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
Nastya
Дата 17.2.2003, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Цитата
Из процедуры на асме - изи


Ну и вчем судь процедуры.
Сам процессconfused.gif?
Как выглядит структура программыconfused.gif?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Baa
Дата 17.2.2003, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
PM ICQ   Вверх
Step
Дата 17.2.2003, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Nastya если ты работашь в ВС то просто составь любое приложение и вместо запуска нажми Ф10 и ты сразу попадеш в винмаин, пошаговое выполнение функций и ты поймеш, как и что работает.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Fantasist
Дата 19.2.2003, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Что-то не въехал в вопрос. Это наоборот обычно - из WinMain вызывается какая-то ваша процедура или метод класса. Ведь что такое WinMain? Это функция, условно говоря, входная точка в программу. То есть, вот вы запускаете exe-шник. Какой код система должна начинать исполнять? Очень просто - в файле exe есть заголовок, по определенному смещению которого находиться адрес входной точки. В этот адрес система и передает управление. Кто же записывает туда этот адрес? Естесственно компилятор, а точнее линковщик. Вы можете в опциях линкера указать, входную точку, то есть функцию, которая и будет вызыватся самой первой. Можно ли сделать ее методом класса? Теоретически можно попробовать, практически - возможно сработает со статическими методами. Есть такой фактор, как декорация имен, в результате которого в откомпилированном файле имена методов могут быть изменены и линкер их просто не найдет (если вы, конечно, не укажате измененное имя). Набор параметров также может являть проблему (указатель на экземляр класса для не статического метода). Потом надо помнить, что, на самом деле, чаще всего, WinMain не является входной точкой. Существует такой модуль как RTL (Run-Time Library), называемый чаще CRT и вот в нем находиться функция, которая и является входной точкой. В CRT от VC существует две такие функции - mainCRTStartUp и WinMainCRTStartUp (точнее, два модуля), которые соответсвенно вызывают функции main и WinMain, но перед этим проводят необходимую инициализацию (инициализация хипа, глобальных переменных и т. п.). Если вы установите свою точку входа, то вы лишитесь этой инициализации.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
AntonSaburov
Дата 19.2.2003, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Вообщем, путем всяческих ухищрений, такое сделать можно.
Хотя это достижение будет мало кого волновать, потому как никому такое не надо.

Самый главный вопрос - ЗАЧЕМ ?

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0988 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.