MFC COM или ATL COM (ActiveX) - PullRequest
       47

MFC COM или ATL COM (ActiveX)

4 голосов
/ 16 ноября 2009

У меня есть некоторый код MFC (пользовательские элементы управления CWnd и некоторые классы для предоставления), который мне нужно сделать в объект activex / COM с интерфейсами. Легче ли сделать проект ATL с поддержкой MFC и таким образом сделать мой ActiveX или создать элемент управления MFC ActiveX?

При выполнении элемента управления ActiveX делает ли двойной интерфейс (как это объясняется в ACDual от Microsoft) хорошим / плохим / не имеет значения?

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

Сложно использовать MFC для COM - слишком много кода для написания, макросов для копирования - однако вы должны знать, что вы делаете, если вы смешиваете MFC и ATL, потому что они обманчиво похожи, но различаются, особенно если вы создаете окна с ATL.

Главное, если вы используете MFC из ATL, вам нужно будет запустить каждый из ваших методов ATL с AFX_MANAGE_STATE (AfxGetStaticModuleState ()), в противном случае вы получите случайные проблемы. Это делается автоматически для вас, когда вы внедряете COM с MFC, поэтому в каждом методе есть эти уродливые макросы METHOD_MANAGE_STATE.

Помимо этого, это просто работает. MFC объекты внутри объектов ATL - это то, что я делаю ..

1 голос
/ 17 ноября 2009

Я всегда использовал прямой ATL без MFC для разработки компонентов COM. MFC полезен в качестве среды приложения, которая мне обычно не нужна для облегченных (не-UI) COM-компонентов. ATL обеспечивает большую поддержку для строк, коллекций и различных служебных классов без необходимости вносить все MFC с логистическими сложностями, которые возникают при этом (например, установка контекста при каждом вызове публичного API и т. Д.). Он также включает некоторую базовую поддержку пользовательского интерфейса через CWindow и его друзей, если вы создаете компонент пользовательского интерфейса.

1 голос
/ 16 ноября 2009

MFC - более простой путь, если вы новичок в COM: мастера лучше и полезнее. Но он гораздо менее гибок, чем ATL, что, вероятно, не является проблемой, если вам просто нужно реализовать пару простых интерфейсов.

Кроме того, IIRC MFC не поддерживает двойные интерфейсы. Двойные интерфейсы интересны в 2 случаях: - Производительность это проблема. Например, вызов короткого метода выполняется миллионы раз. - Пользователи объекта программируются на C ++. Вызов собственного интерфейса намного проще в C ++, чем вызов интерфейса автоматизации.

В заключение, двойные интерфейсы - это круто, но они действительно интересны, только если вы можете получить их бесплатно. Это означает, что вы используете фреймворк, который их поддерживает. Если вы планируете много работу на основе COM, интересно исследовать ATL и более глубокие знания COM. Если вам просто нужно предоставить пару простых объектов на основе MFC, просто придерживайтесь MFC.

...