Здравствуйте, _nn_, Вы писали:
__>Какие преимущества у WTL по сравнению с MFC ? __>Спасибо.
1) Общий принцип разработки. Если в MFC все основано на наследовании, причем не множественном, то в WTL упор на шаблоны и множественное наследование.
2) Использование шаблонов приводит к более гибкому использованию существующих в WTL классов.
3) Т.к. неиспользуемые в коде шаблонные функции и функции-члены шаблонных классов не компилируются, это приводит к уменьшению размеров скомпилированного объектного файла (причем, значительно).
4) Т.к. в большинстве случаев применяется не наследование, а инстанирование шаблонов, то частично пропадает необходимость в таблицах виртуальных функций, что приводит к уменьшению расхода памяти.
5) WTL четко вписывается в понятие паттернов.
6) Исходники WTL значительно меньше и (IMHO) значительней проще в понимании, чем MFC. Это дает возможность быстрее находить баги как свои, так и создателей библиотеки.
Здравствуйте, BioUnit, Вы писали:
BU>Здравствуйте, _nn_, Вы писали:
__>Какие преимущества у WTL по сравнению с MFC ? __>Спасибо.
BU>1) Общий принцип разработки. Если в MFC все основано на наследовании, причем не множественном, то в WTL упор на шаблоны и множественное наследование.
BU>2) Использование шаблонов приводит к более гибкому использованию существующих в WTL классов.
BU>3) Т.к. неиспользуемые в коде шаблонные функции и функции-члены шаблонных классов не компилируются, это приводит к уменьшению размеров скомпилированного объектного файла (причем, значительно).
BU>4) Т.к. в большинстве случаев применяется не наследование, а инстанирование шаблонов, то частично пропадает необходимость в таблицах виртуальных функций, что приводит к уменьшению расхода памяти.
BU>5) WTL четко вписывается в понятие паттернов.
BU>6) Исходники WTL значительно меньше и (IMHO) значительней проще в понимании, чем MFC. Это дает возможность быстрее находить баги как свои, так и создателей библиотеки.
Прям комунизм какой-то.
Я достаточно давно пишу на MFC. Услышал про WTL, посмотрел -- вроде бы удобно. Хочу перейти на него, но сначала хочется узнать про грабли.
Вопросы:
1). Есть ли в WTL аналоги Document/View/Frame ?
2). Есть ли аналог ON_UPDATE_COMMAND_UI ?
3). Тянет ли WTL за собой какую-нить DLL?
4). Не разбухает ли код из-за использования шаблонов?
5). Есть ли в WTL какие-нить особенно неприятные моменты (в MFC, например, меня постоянно доставала невозможность нормального совмещения Document/View и потоков)?
Спасибо.
[]
А>Вопросы: А>1). Есть ли в WTL аналоги Document/View/Frame ?
Нет. Но при желании сделать не долго. К тому же в инете есть наработки. Кстати нет — громко сказано. Есть View/Frame, а документа нет.
А>2). Есть ли аналог ON_UPDATE_COMMAND_UI ?
Есть.
А>3). Тянет ли WTL за собой какую-нить DLL?
Нет.
А>4). Не разбухает ли код из-за использования шаблонов?
Только когда ты сам этого захочешь.
А>5). Есть ли в WTL какие-нить особенно неприятные моменты (в MFC, например, меня постоянно доставала невозможность нормального совмещения Document/View и потоков)?
Баги.
Но это поправимо. Мни даже приятно их вылавливать.
Здравствуйте, Alexey Shirshov, Вы писали:
А>5). Есть ли в WTL какие-нить особенно неприятные моменты (в MFC, например, меня постоянно доставала невозможность нормального совмещения Document/View и потоков)?
AS>Баги. AS>Но это поправимо. Мни даже приятно их вылавливать.
Кстати,о приятном. Я где-то на rsdn брал список багов от Блудова около месяца назад. Линк посеял — не добавилось ли там чего (ну, окромя огрехов в CString)?
МВС
Люди слышат только те вопросы, на которые они в состоянии найти ответ. (с)
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, creatio, Вы писали:
AS>>У меня багов исправлено намного больше. Если хочешь, могу выслать. C>>Ой! А можно и мне
AS>Запроста! Лови.
Еще если бы вы порекомендовали почитать что нибудь по поводу WTL — был бы очень признателен!
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Дмитрий Наумов, Вы писали:
AS>хъ
ДН>>Еще если бы вы порекомендовали почитать что нибудь по поводу WTL — был бы очень признателен!
AS>Тут есть две статьи на сайте. У меня есть две статьи — одна из них в последнем номере журнала, другая еще никуда не выложена.
AS>Можно читать статьи на codeproject'e, но лучше самих исходников ничего нет!
Журналы ждемс... Пока почитаю то что на сайте, а из codeproject можешь что нибудь конкретно порекомендовать?
Здравствуйте, Alexey Shirshov, Вы писали:
AS>У меня своя уже практически WTL. Хотя совместимость сохраняется.
Ага! Спец по WTL попался .
Есть такая задача: В MDI приложении главное окно лежит в одной dll'ке, а чилды лижат в других... Можно ли это заставить работать?
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, muh, Вы писали:
AS>хъ
AS>У меня своя уже практически WTL. Хотя совместимость сохраняется.
AS>Блудов давно ее писал, еще для 3.0. AS>У меня багов исправлено намного больше. Если хочешь, могу выслать.
У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает
МВС
Люди слышат только те вопросы, на которые они в состоянии найти ответ. (с)
[]
muh>У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает
Это не получиться, так как вся WTL основывается на базовых классах CWindowImpl, CDialogImpl и т.д. которые принадлежат ATL.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, creatio, Вы писали:
AS>>У меня багов исправлено намного больше. Если хочешь, могу выслать. C>>Ой! А можно и мне
AS>Запроста! Лови.
Это ж надо было всю WTL переворошить
Могу предложить еще 2 исправления для VC7.0 — включить опцию "Force Conformance In For Loop Scope" (/Zc:forScope) и заинклудить atlmisc.h
Здравствуйте, Alexey Shirshov, Вы писали:
AS>А в чем трабла. Это не MFC, с ее пип... пип... состоянием модуля и пип... CWnd, который нельзя даже в другой поток передавать.
Трудно сказать почемуто хип рушится. Причем когда все в одном ехешнике то все нормально, а когда тоже самое разнесено по дллкам то .
Схема апликухи такая: При загрузки дллка экспортирует фабрики классов. Одна из которых создает синглитонный класс главного MDI окна. Другие создают чилдов. Вся система держится на подсчете ссылок. Соответственно чилд заводит ссылку сам на себя, а когда ему говорят закройся то он обнуляет собственную ссылку и умирает в той куче в которой родился(в каждой длл своя куча). Тем не мение чтото портится .
При использование VCL проблем не возникло...
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
[]
WH>Схема апликухи такая: При загрузки дллка экспортирует фабрики классов. Одна из которых создает синглитонный класс главного MDI окна. Другие создают чилдов. Вся система держится на подсчете ссылок. Соответственно чилд заводит ссылку сам на себя, а когда ему говорят закройся то он обнуляет собственную ссылку и умирает в той куче в которой родился(в каждой длл своя куча). Тем не мение чтото портится .
Может дело как раз в этих кучах? Может лучше использовать стандартные функции malloc и free/new и delete.
По архитектуре: зачем держать ссылку самому на себя. По идее, главное окно должно держать ссылки. Потом, зачем тебе вообще они нужны? Хочешь, чтобы все автоматом удалялось/подчищалось — убивай объект в FinalMessage, а деструктор сделать защищенным.
WH>При использование VCL проблем не возникло...
[]
AS>Запроста! Лови.
PM>Это ж надо было всю WTL переворошить
Да я не всю переворотил. Чуть-чуть только.
Там кстати у файликов read-only аттрибут. Это потому, что они у меня под VSS лежат. Я вот думаю завести какую-нибудь страничку на RSDN и выкладывать туда регулярно обновленные версии, новые компоненты.
Вот историю на выходные из VSS подниму, тоже выложить нужно будет.
Может сдлать голосование? Попросим у IT места, авось даст.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Там кстати у файликов read-only аттрибут. Это потому, что они у меня под VSS лежат. Я вот думаю завести какую-нибудь страничку на RSDN и выкладывать туда регулярно обновленные версии, новые компоненты. AS>Вот историю на выходные из VSS подниму, тоже выложить нужно будет.
AS>Может сдлать голосование? Попросим у IT места, авось даст.
Я думаю зачем делать голосование на весь сайт? Просто попросить места у IT, думаю он поймет, дело то стоящее.
[]
ДН>Я думаю зачем делать голосование на весь сайт? Просто попросить места у IT, думаю он поймет, дело то стоящее.
Ладно, поговорю.
Re[10]: MFC vs. WTL
От:
Аноним
Дата:
22.04.03 09:57
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, PM, Вы писали:
AS>Там кстати у файликов read-only аттрибут. Это потому, что они у меня под VSS лежат. Я вот думаю завести какую-нибудь страничку на RSDN и выкладывать туда регулярно обновленные версии, новые компоненты. AS>Вот историю на выходные из VSS подниму, тоже выложить нужно будет.
Может лучше на sf.net проект под это дело создать?
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Alexey Shirshov, Вы писали:
AS>>А в чем трабла. Это не MFC, с ее пип... пип... состоянием модуля и пип... CWnd, который нельзя даже в другой поток передавать. WH>Трудно сказать почемуто хип рушится.
Может потому что для каждой dll он свой? Ты не можешь выделить память по new или malloc в одной dll и разрушить в другой.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, muh, Вы писали:
AS>[]
muh>У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает
AS>Это не получиться, так как вся WTL основывается на базовых классах CWindowImpl, CDialogImpl и т.д. которые принадлежат ATL.
Мда. Как бы покорректнее-то ответить, что я в курсе Ну да ладно.
АТЛ (например, без всяких там CWindow::GetDlgControl) напрямую сквозит только при старте/запуске модуля и обращения к нему по ходу создания окон как к хранилищу обработчиков. Наиболее яркий пример, откдуа очент сильно дует : создание переходника и регистрация его через _Module.AddCreateWndData(&m_thunk.cd,this).
Ладно, черт с ним, все равно это бредовая идея — отвязать WTL от VC и ATL
МВС
Люди слышат только те вопросы, на которые они в состоянии найти ответ. (с)
Здравствуйте, Tom, Вы писали:
Tom>Может потому что для каждой dll он свой? Ты не можешь выделить память по new или malloc в одной dll и разрушить в другой.
Ты меня за кого держишь?
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Может дело как раз в этих кучах? Может лучше использовать стандартные функции malloc и free/new и delete.
Я через них и работаю. А как ты думаешь они реализованы? Не из ехешника же они вызываются...
AS>По архитектуре: зачем держать ссылку самому на себя. По идее, главное окно должно держать ссылки. Потом, зачем тебе вообще они нужны? Хочешь, чтобы все автоматом удалялось/подчищалось — убивай объект в FinalMessage, а деструктор сделать защищенным.
Я так и делаю
В общем абстрактная фабрика с загрузкой классов из дллек во время старта аппликухи. Вобщем навороченая плагинная аппликуха в которой ехешник выполняет только роль загрузчика плагинов один из которых стартовый .
AS>Наверняка из-за памяти проблемы.
Я тут начинаю думать что из-за компа... Дома все работает... Ну почти все но куча не падает.
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
хъ
muh>У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает
Я наверное чего-то не догоняю. Раз WTL базируется на ATL, то получается что там сплошные ActiveX компоненты. То есть если я напишу простую прожку, то она будет писать в реестр как COM сервер?
Измеряй высоту своего ума по тени, которую он отбрасывает...