Re: MFC, API, Framework и ещё много страшных слов :)
От: Кодт Россия  
Дата: 27.05.04 00:17
Оценка:
Здравствуйте, RealSQUALL, Вы писали:

RSQ>1 наконец созрел для настоящего проэкта Вот только теперь рё-

RSQ> брышком встал вопрос: я пишу на С++, лучше писать с использо-
RSQ> ванием MFC или просто так, API-шками?

Для начала — уточним, что API — это application programming interface, то есть интерфейс прикладных программ "вообще".
На жаргоне этим словом чаще всего обозначают Windows API, или WinAPI.
Ну это я так, к букве прикопался.
Кстати говоря, VC обеспечивает, помимо WinAPI, ещё и POSIX (частично).

Настоящий проект нужно делать с использованием хорошего фреймворка — "магазина велосипедов" , даже не магазина, а супермаркета и велотрека.
MFC, хотя и не самая лучшая библиотека, но в паре с VC — неплохой выбор. (Отчасти потому, что с другими фреймворками на VC работать труднее).

RSQ>2 насколько я понял, есть "локальные" классы и методы (MFC) и

RSQ> "глобальные" (API). Такой вопрос: а к каким из них относится
RSQ> Framework?

WinAPI — это набор не классов и методов, а просто функций. Да и другие API — часто тоже. Это позволяет писать прикладные программы на разных языках, в том числе низкого уровня, и не привязываться к объектной модели того или иного языка.
Помимо "базового", у Windows есть множество API построенных на OLE/COM/DCOM. Например, DirectX, Shell, Scripting.

Фреймворк — это надстройка над API, обеспечивающая среду, удобную для программиста. Например, MFC не только определяет классы для работы с окнами, объектами ядра и графики — но ещё и создаёт среду их существования (внутренние структуры данных), а также интегрируется в инструмент разработки — VisualStudio.

RSQ>3 судя по тому что писал Стивен Прата в книге "Язык программи-

RSQ> рования С++", неиспользуемые классы/функции просто не компи-
RSQ> лируются в окончательный продукт. Отсюда вывод: т.к. exe-шники
RSQ> из 240 Кб лихо ZIP'ятся в 125 Кб (MFC, когда я использую не
RSQ> больше 2-3 классов), то я упускаю какую-то опцию или что-то
RSQ> вроди этого, подскажите пожалуйста...

Куда деваются неиспользуемые классы и функции — это сильно зависит от того, как была собрана библиотека.
Если каждая экспортируемая функция, переменная, таблица виртуальных методов помещена в отдельный объектный файл — то линковщик при сборке программы оставит только то, что попрошено.
Если в одном объектном файле (полученном из компилируемого исходного файла) много экспортируемых функций — то достаточно использовать любую из них, чтобы в собранной программе оказались все.
Наконец, если библиотека собрана как DLL, то программа будет грузить её целиком; в файле программы будет лишь таблица импорта.

Исполняемые программы неплохо сжимаются, но не из-за MFC или чего-то другого. Результат компиляции ассемблерного текста (если, конечно, не приложить специальных усилий против архиватора) тоже сожмётся.
Конечно, чем больше сторонних библиотек использует программа, тем больше размер таблиц импорта и таблиц перемещений в файле .exe, что играет на руку архиватору.
... << RSDN@Home 1.1.2 stable >>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.