От MFC Dialog к COM...

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
ALTOM
Сообщения: 4
Зарегистрирован: 11 июл 2009, 13:45

Решаю, осваивать ли COM-технологию ?
Написаны DLL на VC++ 6, содержащие MFC-классы диалогов.
Теперь требуется их переработать и в будущем разрабатывать новые классы, которые можно было бы использовать и в VC++ 6, и в C++.net и в C#.net ?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Переделка содержимого диалогов в ActiveX элемент управления, или самого диалога в COM объект - это действительно выход из данной ситуации. Платформа .NET чудесным образом умеет дружить с COM, потому всё будет работать как в VC 6, так и в C++.NET и C#.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

.NET конечно хорошо взаимодействует с СОМ-объектами, но в данном случае это будет не самым лучшим решением.
На мой взгляд, лучше оставить существующую DLL такой, какая она есть. А для платформы .NET создать отдельную сборку и реализовать аналогичные визуальные формы с помощью Windows.Forms и языка C#.

Альтернативный вариант: в проект существующей DLL включить поддержку CLR и с помощью C++/CLI сделать классы-обёртки для уже существующих классов С++. Тогда она становится доступной для программирования в языках CLR. К тому же в свойствах проекта CLR-сборки можно включить опцию совместимости с СОМ и она автоматически становится СОМ-объектом.

Если же переделывать существующую DLL в СОМ-объект без использования CLR, то нужно будет фактически создавать новый проект СОМ-сервера и переносить в него уже существующий код из ранее созданного проекта DLL.
ALTOM
Сообщения: 4
Зарегистрирован: 11 июл 2009, 13:45

Для .NET пока сам не программировал, и м.б. поэтому из Вашего ответа не понял, как будет возможно использовать новые классы в VC 6 ?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Когда создаёшь CLR-сборку, можно в свойствах проекта установить опцию COM-compatible, что добавляет в этот модуль библиотеку типов и через СОМ-интерфейс делает этот модуль доступным для других языков программирования (таких как С++, VBA, JavaScript и пр.).
ALTOM
Сообщения: 4
Зарегистрирован: 11 июл 2009, 13:45

Правильно ли я понял ?
Вы предлагаете исходники, написанные на VC++ 6, скопировать в проект на C++/CLI и к ним добавить обертки для классов.
Надо будет изменять синтаксис исходников ?
И как произойдёт преобразование вызовов MFC ?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Visual С++ 2005 и выше позволяет включить поддержку CLR в уже существующий проект. Т.е. первоначальный исходный код преокта менять не нужно. Надо лишь написать на C++/CLI обращение к уже существующим функциям и классам MFC. Тогда этот модуль станет доступным для использования в других .NET-приложениях.
ALTOM
Сообщения: 4
Зарегистрирован: 11 июл 2009, 13:45

Спа-си-бо за ответы.
Буду пробовать, сделать то, что Вы рекомендуете...
Надеюсь, что не потрачу ВРЕМЯ и СИЛЫ зря...
Претензий нет и не будет.
До следующих вопросов.
ALTOM.
Ответить