MFC vs. WTL
От: _nn_ www.nemerleweb.com
Дата: 19.04.03 14:15
Оценка:
Какие преимущества у WTL по сравнению с MFC ?
Спасибо.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: MFC vs. WTL
От: BioUnit Россия  
Дата: 20.04.03 07:50
Оценка: 25 (3)
Здравствуйте, _nn_, Вы писали:

__>Какие преимущества у WTL по сравнению с MFC ?

__>Спасибо.

1) Общий принцип разработки. Если в MFC все основано на наследовании, причем не множественном, то в WTL упор на шаблоны и множественное наследование.

2) Использование шаблонов приводит к более гибкому использованию существующих в WTL классов.

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

4) Т.к. в большинстве случаев применяется не наследование, а инстанирование шаблонов, то частично пропадает необходимость в таблицах виртуальных функций, что приводит к уменьшению расхода памяти.

5) WTL четко вписывается в понятие паттернов.

6) Исходники WTL значительно меньше и (IMHO) значительней проще в понимании, чем MFC. Это дает возможность быстрее находить баги как свои, так и создателей библиотеки.
Re[2]: MFC vs. WTL
От: _nn_ www.nemerleweb.com
Дата: 20.04.03 11:46
Оценка:
Здравствуйте, BioUnit, Вы писали:

Спасибо.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: MFC vs. WTL
От: Аноним  
Дата: 21.04.03 08:28
Оценка:
Здравствуйте, 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 и потоков)?
Спасибо.
Re[3]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 21.04.03 09:30
Оценка:
Здравствуйте, Аноним, Вы писали:

[]

А>Вопросы:

А>1). Есть ли в WTL аналоги Document/View/Frame ?

Нет. Но при желании сделать не долго. К тому же в инете есть наработки. Кстати нет — громко сказано. Есть View/Frame, а документа нет.

А>2). Есть ли аналог ON_UPDATE_COMMAND_UI ?


Есть.

А>3). Тянет ли WTL за собой какую-нить DLL?


Нет.

А>4). Не разбухает ли код из-за использования шаблонов?


Только когда ты сам этого захочешь.

А>5). Есть ли в WTL какие-нить особенно неприятные моменты (в MFC, например, меня постоянно доставала невозможность нормального совмещения Document/View и потоков)?


Баги.
Но это поправимо. Мни даже приятно их вылавливать.
Re[4]: MFC vs. WTL
От: muh  
Дата: 21.04.03 10:50
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

А>5). Есть ли в WTL какие-нить особенно неприятные моменты (в MFC, например, меня постоянно доставала невозможность нормального совмещения Document/View и потоков)?


AS>Баги.

AS>Но это поправимо. Мни даже приятно их вылавливать.
Кстати,о приятном. Я где-то на rsdn брал список багов от Блудова около месяца назад. Линк посеял — не добавилось ли там чего (ну, окромя огрехов в CString)?
МВС
Люди слышат только те вопросы, на которые они в состоянии найти ответ. (с)
Re[5]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 21.04.03 11:41
Оценка:
Здравствуйте, muh, Вы писали:

хъ

У меня своя уже практически WTL. Хотя совместимость сохраняется.

Блудов давно ее писал, еще для 3.0.
У меня багов исправлено намного больше. Если хочешь, могу выслать.
Re[6]: MFC vs. WTL
От: creatio Украина  
Дата: 21.04.03 12:20
Оценка:
AS>У меня багов исправлено намного больше. Если хочешь, могу выслать.
Ой! А можно и мне
Why do you call Visual Studio 'your bunny'?...
(c) one american colleague
Re[7]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 21.04.03 12:29
Оценка: 48 (5)
Здравствуйте, creatio, Вы писали:

AS>У меня багов исправлено намного больше. Если хочешь, могу выслать.

C>Ой! А можно и мне

Запроста! Лови.
Re[8]: MFC vs. WTL
От: Дмитрий Наумов  
Дата: 21.04.03 13:21
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

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


AS>>У меня багов исправлено намного больше. Если хочешь, могу выслать.

C>>Ой! А можно и мне

AS>Запроста! Лови.


Еще если бы вы порекомендовали почитать что нибудь по поводу WTL — был бы очень признателен!
... << RSDN@Home 1.0 beta 6a >>
Re[9]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 21.04.03 13:35
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

хъ

ДН>Еще если бы вы порекомендовали почитать что нибудь по поводу WTL — был бы очень признателен!


Тут есть две статьи на сайте. У меня есть две статьи — одна из них в последнем номере журнала, другая еще никуда не выложена.

Можно читать статьи на codeproject'e, но лучше самих исходников ничего нет!
Re[10]: MFC vs. WTL
От: Дмитрий Наумов  
Дата: 21.04.03 14:08
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Здравствуйте, Дмитрий Наумов, Вы писали:


AS>хъ


ДН>>Еще если бы вы порекомендовали почитать что нибудь по поводу WTL — был бы очень признателен!


AS>Тут есть две статьи на сайте. У меня есть две статьи — одна из них в последнем номере журнала, другая еще никуда не выложена.


AS>Можно читать статьи на codeproject'e, но лучше самих исходников ничего нет!


Журналы ждемс... Пока почитаю то что на сайте, а из codeproject можешь что нибудь конкретно порекомендовать?
... << RSDN@Home 1.0 beta 6a >>
Re[6]: MFC vs. WTL
От: WolfHound  
Дата: 21.04.03 15:02
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>У меня своя уже практически WTL. Хотя совместимость сохраняется.


Ага! Спец по WTL попался .
Есть такая задача: В MDI приложении главное окно лежит в одной dll'ке, а чилды лижат в других... Можно ли это заставить работать?
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: MFC vs. WTL
От: muh  
Дата: 22.04.03 03:37
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

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


AS>хъ


AS>У меня своя уже практически WTL. Хотя совместимость сохраняется.


AS>Блудов давно ее писал, еще для 3.0.

AS>У меня багов исправлено намного больше. Если хочешь, могу выслать.
У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает
МВС
Люди слышат только те вопросы, на которые они в состоянии найти ответ. (с)
Re[11]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.04.03 04:25
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

[]

ДН>Журналы ждемс... Пока почитаю то что на сайте, а из codeproject можешь что нибудь конкретно порекомендовать?


Если просто почитать, то вот.
А так, там в основном контролы самописные (не без багов ) и helper-classes.
Re[7]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.04.03 04:27
Оценка:
Здравствуйте, WolfHound, Вы писали:

хъ

WH>Есть такая задача: В MDI приложении главное окно лежит в одной dll'ке, а чилды лижат в других... Можно ли это заставить работать?


А в чем трабла. Это не MFC, с ее пип... пип... состоянием модуля и пип... CWnd, который нельзя даже в другой поток передавать.
Re[7]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.04.03 04:29
Оценка:
Здравствуйте, muh, Вы писали:

[]

muh>У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает


Это не получиться, так как вся WTL основывается на базовых классах CWindowImpl, CDialogImpl и т.д. которые принадлежат ATL.
Re[8]: MFC vs. WTL
От: PM  
Дата: 22.04.03 05:23
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

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


AS>>У меня багов исправлено намного больше. Если хочешь, могу выслать.

C>>Ой! А можно и мне

AS>Запроста! Лови.


Это ж надо было всю WTL переворошить

Могу предложить еще 2 исправления для VC7.0 — включить опцию "Force Conformance In For Loop Scope" (/Zc:forScope) и заинклудить atlmisc.h
... << RSDN@Home 1.0 beta 6a >>
Re[8]: MFC vs. WTL
От: WolfHound  
Дата: 22.04.03 05:54
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>А в чем трабла. Это не MFC, с ее пип... пип... состоянием модуля и пип... CWnd, который нельзя даже в другой поток передавать.

Трудно сказать почемуто хип рушится. Причем когда все в одном ехешнике то все нормально, а когда тоже самое разнесено по дллкам то .

Схема апликухи такая: При загрузки дллка экспортирует фабрики классов. Одна из которых создает синглитонный класс главного MDI окна. Другие создают чилдов. Вся система держится на подсчете ссылок. Соответственно чилд заводит ссылку сам на себя, а когда ему говорят закройся то он обнуляет собственную ссылку и умирает в той куче в которой родился(в каждой длл своя куча). Тем не мение чтото портится .

При использование VCL проблем не возникло...
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.04.03 06:01
Оценка:
Здравствуйте, WolfHound, Вы писали:

[]

WH>Схема апликухи такая: При загрузки дллка экспортирует фабрики классов. Одна из которых создает синглитонный класс главного MDI окна. Другие создают чилдов. Вся система держится на подсчете ссылок. Соответственно чилд заводит ссылку сам на себя, а когда ему говорят закройся то он обнуляет собственную ссылку и умирает в той куче в которой родился(в каждой длл своя куча). Тем не мение чтото портится .


Может дело как раз в этих кучах? Может лучше использовать стандартные функции malloc и free/new и delete.

По архитектуре: зачем держать ссылку самому на себя. По идее, главное окно должно держать ссылки. Потом, зачем тебе вообще они нужны? Хочешь, чтобы все автоматом удалялось/подчищалось — убивай объект в FinalMessage, а деструктор сделать защищенным.

WH>При использование VCL проблем не возникло...


Наверняка из-за памяти проблемы.
Re[9]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.04.03 06:04
Оценка:
Здравствуйте, PM, Вы писали:

[]

AS>Запроста! Лови.


PM>Это ж надо было всю WTL переворошить


Да я не всю переворотил. Чуть-чуть только.
Там кстати у файликов read-only аттрибут. Это потому, что они у меня под VSS лежат. Я вот думаю завести какую-нибудь страничку на RSDN и выкладывать туда регулярно обновленные версии, новые компоненты.
Вот историю на выходные из VSS подниму, тоже выложить нужно будет.

Может сдлать голосование? Попросим у IT места, авось даст.
Re[10]: MFC vs. WTL
От: Дмитрий Наумов  
Дата: 22.04.03 06:32
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Там кстати у файликов read-only аттрибут. Это потому, что они у меня под VSS лежат. Я вот думаю завести какую-нибудь страничку на RSDN и выкладывать туда регулярно обновленные версии, новые компоненты.

AS>Вот историю на выходные из VSS подниму, тоже выложить нужно будет.

AS>Может сдлать голосование? Попросим у IT места, авось даст.


Я думаю зачем делать голосование на весь сайт? Просто попросить места у IT, думаю он поймет, дело то стоящее.
... << RSDN@Home 1.0 beta 6a >>
Re[11]: MFC vs. WTL
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 22.04.03 07:24
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

[]

ДН>Я думаю зачем делать голосование на весь сайт? Просто попросить места у IT, думаю он поймет, дело то стоящее.


Ладно, поговорю.
Re[10]: MFC vs. WTL
От: Аноним  
Дата: 22.04.03 09:57
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

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


AS>Там кстати у файликов read-only аттрибут. Это потому, что они у меня под VSS лежат. Я вот думаю завести какую-нибудь страничку на RSDN и выкладывать туда регулярно обновленные версии, новые компоненты.

AS>Вот историю на выходные из VSS подниму, тоже выложить нужно будет.

Может лучше на sf.net проект под это дело создать?
Re[9]: MFC vs. WTL
От: Tom Россия http://www.RSDN.ru
Дата: 22.04.03 10:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Alexey Shirshov, Вы писали:


AS>>А в чем трабла. Это не MFC, с ее пип... пип... состоянием модуля и пип... CWnd, который нельзя даже в другой поток передавать.

WH>Трудно сказать почемуто хип рушится.
Может потому что для каждой dll он свой? Ты не можешь выделить память по new или malloc в одной dll и разрушить в другой.
... << RSDN@Home 1.0 beta 6a >>
Народная мудрось
всем все никому ничего(с).
Re[8]: MFC vs. WTL
От: muh  
Дата: 22.04.03 12:49
Оценка:
Здравствуйте, 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
МВС
Люди слышат только те вопросы, на которые они в состоянии найти ответ. (с)
Re[10]: MFC vs. WTL
От: WolfHound  
Дата: 22.04.03 18:06
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Может потому что для каждой dll он свой? Ты не можешь выделить память по new или malloc в одной dll и разрушить в другой.

Ты меня за кого держишь?
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: MFC vs. WTL
От: WolfHound  
Дата: 22.04.03 18:06
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Может дело как раз в этих кучах? Может лучше использовать стандартные функции malloc и free/new и delete.

Я через них и работаю. А как ты думаешь они реализованы? Не из ехешника же они вызываются...

AS>По архитектуре: зачем держать ссылку самому на себя. По идее, главное окно должно держать ссылки. Потом, зачем тебе вообще они нужны? Хочешь, чтобы все автоматом удалялось/подчищалось — убивай объект в FinalMessage, а деструктор сделать защищенным.

Я так и делаю
LRESULT C_Form_Test::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
    thisHolder=this;
    m_hWndClient = m_view.Create(m_hWnd);
    bHandled = FALSE;
    return 1;
}
void C_Form_Test::OnFinalMessage(HWND /*hWnd*/)
{
    thisHolder=0;//Фактически delete this;
}

А создаю чилдов так
    if(T_RefStrong<I_ClassFactory> childFactory=application->GetFactory("Form_Test"))
        if(T_RefStrong<I_ChildForm> child=ref_cast<I_ChildForm>(childFactory->CreateInstance()))
            child->CreateEx(m_hWndClient);

В общем абстрактная фабрика с загрузкой классов из дллек во время старта аппликухи. Вобщем навороченая плагинная аппликуха в которой ехешник выполняет только роль загрузчика плагинов один из которых стартовый .

AS>Наверняка из-за памяти проблемы.

Я тут начинаю думать что из-за компа... Дома все работает... Ну почти все но куча не падает.
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: MFC vs. WTL
От: Keeper_andrew Беларусь  
Дата: 22.04.03 19:17
Оценка:
Здравствуйте, muh, Вы писали:

хъ

muh>У меня вот тут идея возникла — отвязять WTL от ATL полностью, т.е. использовать ее только для разработки GUI, а ATL использовать в качестве traits&policy для шаблонов. VC, конечно хорошо, но такой валенок порой бывает


Я наверное чего-то не догоняю. Раз WTL базируется на ATL, то получается что там сплошные ActiveX компоненты. То есть если я напишу простую прожку, то она будет писать в реестр как COM сервер?
Измеряй высоту своего ума по тени, которую он отбрасывает...
Re[11]: MFC vs. WTL
От: Tom Россия http://www.RSDN.ru
Дата: 23.04.03 07:30
Оценка:
WH>Ты меня за кого держишь?
Да ладно тебе. Думаю вдруг человек забыл...
... << RSDN@Home 1.0 beta 6a >>
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.