и работа с кодом, созданным midl.exe
Это болт-номер номер один. Midl.exe делает не генерировать код, он только генерирует объявления. Чистые виртуальные классы в C++, только объявления методов с no реализации. Либо в файл .h, либо в файл библиотеки типа .tlb. Библиотека типов удобна, поскольку ее легко читать с помощью инструментария, имеющего ограниченный подмножество COM под названием Automation. И реализовано практически во всех языковых версиях Windows.
Ключевым моментом является то, что это только декларации, клей, который делает код, написанный в разных модулях и/или разных языках или библиотеках классов, работает вместе. Очень важно в больших проектах, интерфейсы связывают части вместе.
Наш системный архитектор узнал о нашем подходе и сообщил, что мы находим способ не добавлять эти COM-специфики в наши новые проекты Qt.
Это исключительный бесполезный совет. «Не делай этого» - это то, что мой врач говорит мне, когда мне больно засунуть руку за спину. Я могу жить с этим, у меня есть хорошая альтернатива и могу просто развернуться. В вашем случае я должен был бы потребовать от архитектора еще. Он возится с частями тела, он отделяет туловище от ног, головы, ног и рук. Мозг совершенно разрознен. Самый клей, который делает разные куски кода, которые вы сейчас используете, работает вместе. Разрыв этого интерфейса, и вы серьезно повредите свое приложение, стиль Netscape.
Остерегайтесь архитектора-астронавта (еще одного любителя Спольского), который рад заставить вас во что-то, что он понимает, но не нуждается в реализации. Спросите разумную альтернативу, подход архитектуры, так как разрыв интерфейсов имеет глубокое архитектурное влияние на ваше приложение.Те классы MFC, которые все внедрили из интерфейсов, в значительной степени нежелательны при изменении интерфейса. Переписывание их всех в классы Q будет серьезно держать вас непродуктивными на некоторое время. И это разрушительно скучный код для написания. Только производить то же самое, с большим количеством ошибок. Вещи, которые вы не должны делать, часть 2.
Вещи, которые вы не должны делать, часть 1: http://www.joelonsoftware.com/articles/fog0000000069.html –
И нет, общепринятые стандарты двоичного интерфейса не растут деревья. Qt работает очень хорошо, но это, безусловно, не универсально. –
Я не собираюсь выбрасывать код. Я хочу повторно использовать его, но не добавляйте прямую зависимость от «старой» технологии в новых реализациях. Я также не заинтересован в двоичной совместимости, я просто хочу, чтобы сборник заголовков с библиотекой-оберткой связывался с ним вместо импорта TLB и напрямую обрабатывал COM-интерфейсы. –