MFC, API, Framework и ещё много страшных слов :)
От: RealSQUALL Украина  
Дата: 26.05.04 22:34
Оценка:
Компилятор: Visual Studio .NET 2003 (Framework v1.1)
ОС: Microsoft Windows XP Pro SP1
====================================================

Здравствуйте,

1 наконец созрел для настоящего проэкта Вот только теперь рё-
брышком встал вопрос: я пишу на С++, лучше писать с использо-
ванием MFC или просто так, API-шками?

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

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

Заранее спасибо.

27.05.04 14:53: Перенесено из 'C/C++'
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 >>
Перекуём баги на фичи!
Re[2]: MFC, API, Framework и ещё много страшных слов :)
От: MaximE Великобритания  
Дата: 27.05.04 06:22
Оценка: 15 (1)
Кодт wrote:

> Куда деваются неиспользуемые классы и функции — это сильно зависит от того, как была собрана библиотека.

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

В общем случае это не так.

По-умолчанию, только в отладочном режиме не устраняются неиспользуемые ф-ции (опция линкера OPT:REF).

P.S. Кроме того, при включенной опции OPT:ICF (включена в релизе по-умолчанию), линкер "сворачивает" бинарно идентичные ф-ции, что, в частности, предотвращает code bloat, появляющийся при инстанциации одного и того же шаблона разными типами (т.е. vector<int> будет использовать то же самый код, что и vector<long>).

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 alpha
Re[3]: MFC, API, Framework и ещё много страшных слов :)
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 27.05.04 06:36
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>По-умолчанию, только в отладочном режиме не устраняются неиспользуемые ф-ции (опция линкера OPT:REF).


Добавлю, что для использования OPT:REF нужно еще применить ключ компилятора /Gy (Enable Function-Level Linking).
- Искренне ваш, Поросенок Пафнутий
Re: Re: MFC, API, Framework и ещё много страшных слов
От: Nuald Россия http://nuald.blogspot.com
Дата: 27.05.04 06:41
Оценка: 1 (1) +1
Здравствуйте, RealSQUALL, Вы писали:

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

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

Я сейчас делаю то же самое, поэтому могу посоветовать только одно — использовать только самую новую VS с новым MFC (мне сейчас приходится использовать VS 6, и от ее глюков уже достаточно устал)... И использовать по-возможности очень осторожно MFC — я для надежности ко многим WinAPI-функциям просто написал wrapper-ы с использованием STL-их типов, а от MFC-х функций и классов отказался. Также не забудьте про другие библиотеки — типа того же boost-а. А от MFC в моем проекте только остался каркас обработки сообщений. Также могу посоветовать приглядется к другим GUI-библиотекам, скажем мои коллеги вполне успешно используют QT для разработки.
Re: MFC, API, Framework и ещё много страшных слов :)
От: _nn_  
Дата: 27.05.04 06:50
Оценка: -1
Здравствуйте, RealSQUALL, Вы писали:

Есть более страшное слово — WTL
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: MFC, API, Framework и ещё много страшных слов :)
От: Кодт Россия  
Дата: 27.05.04 08:51
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, MaximE, Вы писали:


ME>>По-умолчанию, только в отладочном режиме не устраняются неиспользуемые ф-ции (опция линкера OPT:REF).


SDB>Добавлю, что для использования OPT:REF нужно еще применить ключ компилятора /Gy (Enable Function-Level Linking).


Я эту фичу знаю и использую, но какими словами это обозвать по-русски — не сообразил И решил, что вместо пространных рассуждений можно ограничиться упрощённой моделью.
Видимо, упростил чрезмерно...
Перекуём баги на фичи!
Re: MFC, API, Framework и ещё много страшных слов :)
От: RealSQUALL Украина  
Дата: 27.05.04 22:50
Оценка: -2
Хммм... насколько я понял:
— MFC входит в Framework
— MFC нужен только для понта, а не для серьёзных проектов
— ниже уровня (или на уровне) WinAPI ничего нет
Re[2]: MFC, API, Framework и ещё много страшных слов :)
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 28.05.04 04:52
Оценка: +1
Здравствуйте, RealSQUALL, Вы писали:

RSQ> — MFC входит в Framework

MFC — это и есть framework ("каркас" для разработки приложений). Такой же, как wxWindows, Qt, WTL, etc. К .NET Framework никакого отношения не имеет.

RSQ> — MFC нужен только для понта, а не для серьёзных проектов

ИМХО — бред. Прошу прощения за резкость, конечно. Система интернет-трейдинга — это серьезный проект в Вашем понимании?

RSQ> — ниже уровня (или на уровне) WinAPI ничего нет

Да.
- Искренне ваш, Поросенок Пафнутий
Re[2]: MFC, API, Framework и ещё много страшных слов :)
От: Аноним  
Дата: 28.05.04 18:05
Оценка:
RSQ> — MFC нужен только для понта, а не для серьёзных проектов

Вот как раз понтов в MFC никаких нет — вышла она из моды Но проекты делать можно.
Re[3]: MFC, API, Framework и ещё много страшных слов :)
От: RealSQUALL Украина  
Дата: 29.05.04 03:41
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Система интернет-трейдинга

Если честно, не задумывался о таком, но идею насчёт MFC понял...
Re[2]: Re: MFC, API, Framework и ещё много страшных слов
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 29.05.04 05:30
Оценка: :)
Здравствуйте, Nuald, Вы писали:

N>Я сейчас делаю то же самое, поэтому могу посоветовать только одно — использовать только самую новую VS с новым MFC (мне сейчас приходится использовать VS 6, и от ее глюков уже достаточно устал)... И использовать по-возможности очень осторожно MFC — я для надежности ко многим WinAPI-функциям просто написал wrapper-ы с использованием STL-их типов, а от MFC-х функций и классов отказался. Также не забудьте про другие библиотеки — типа того же boost-а. А от MFC в моем проекте только остался каркас обработки сообщений. Также могу посоветовать приглядется к другим GUI-библиотекам, скажем мои коллеги вполне успешно используют QT для разработки.


Подключать к проекту MFC и при этом практически ее не использовать — это мне сильно напоминает известный анекдот "Как я обманул кондуктора — взял билет и не поехал"
Re[3]: Re: MFC, API, Framework и ещё много страшных слов
От: Аноним  
Дата: 29.05.04 15:55
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

...

OE>Подключать к проекту MFC и при этом практически ее не использовать — это мне сильно напоминает известный анекдот "Как я обманул кондуктора — взял билет и не поехал"


Но использовать CArray точно не стоит. Как было приятно обнаружить следующую строчку в CArray<>::SetSize :


        // copy new data from old
        memcpy(pNewData, m_pData, m_nSize * sizeof(TYPE));


вот так просто, "copy new data from old". Действительно, к чему вызывать конструкторы/деструкторы, только время тратить.
Re[2]: MFC, API, Framework и ещё много страшных слов :)
От: Nuald Россия http://nuald.blogspot.com
Дата: 01.06.04 08:47
Оценка:
Здравствуйте, RealSQUALL, Вы писали:

RSQ> — ниже уровня (или на уровне) WinAPI ничего нет


В принципе, можно все делать и на уровне WinAPI — ничего страшного в этом нет. Это конечно будет непросто, но не так уж и сложно. Но когда вы будете делать даже простейший скролл-бар на WinAPI, то вы поймете, что такое настоящий геморрой — у нас для этого понадобилось не меньше 100-200 строчек кода (прокрутка окна, изменение самой позиции скроллбара, обеспечение захвата мышкой, обработка плавных и быстрых скачков, работа со скроллером мыши)
Так что можете посмотреть Рихтера "Программирование Windows 2000 для профессионалов" (или что-то в этом роде), посмотреть на примеры кодов, которые он там приводит, и сами приходите к нужному выводу.
Re[4]: Re: MFC, API, Framework и ещё много страшных слов
От: SWW Россия  
Дата: 01.06.04 09:18
Оценка: +1
А>Но использовать CArray точно не стоит. Как было приятно обнаружить следующую строчку в CArray<>::SetSize :
А>
А>        // copy new data from old
А>        memcpy(pNewData, m_pData, m_nSize * sizeof(TYPE));
А>


А>вот так просто, "copy new data from old". Действительно, к чему вызывать конструкторы/деструкторы, только время тратить.


В CArray есть, конечно, недостатки (например возврат объекта вместо ссылки на него), но IMHO не стоит считать разработчиков идиотами до такой степени.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.