Независимость
от языка
Разработанный
DLL СОМ-сервер выполняет свою функцию, обслуживая клиентское приложение, разработанное
на языке C++. Но он не будет работать с приложениями, написанными на других
языках. В MS-документации под другими языками имеют в виду СОМ-совместимые языки:
VB, VBScript, Visual J++ и С в версии Microsoft. Остальные платформы и языки
пренебрегают технологией СОМ и поэтому как бы не существуют.
Так вот, чтобы
сделать наш объект доступным из клиентского приложения, разработанного на одном
из перечисленных четырех языков, надо познакомиться с еще одним внушительным
пластом технологии СОМ. Это язык MIDL (Microsoft Interface Definition Language)
и компилятор этого языка (MIDL compiler), который тоже иногда называют просто
MIDL. Язык MIDL имеет достаточно много новых для C++ ключевых слов, которые
более точно описывают атрибуты интерфейсов, классов и их методов, но он не имеет
никаких исполняемых операторов (типа for, if и т. д.). Предположим, что вы создали
файл MyCom.idl, в котором более точно описали интерфейсы, класс объекта СОМ
и библиотеку его типов. В результате компиляции вашего IDL-файла будут сгенерированы
несколько других файлов. В их число входят две заглушки MyCom_i.c и МуСот_р.с
на языке С и файл заголовков MyCom.h. Эти файлы теперь можно использовать для
обеспечения интерфейса между клиентским и серверным приложениями.
Все начиналось
с языка С, но потом было решено, что другие языки тоже должны участвовать в
движении СОМ. Проблема совместимости языков возникает потому, что типы данных,
используемые в языке С, не совпадают с типами в других языках. Более того, в
некоторых из этих языков переменная может по прихоти разработчика изменять свой
тип по ходу программы, что совершенно неприемлемо в логике С и C++. В связи
с этим и был разработан метаязык более высокого уровня, который используется
только для определений (definitions) всех данных, связанных с объектами СОМ,
и сопряжения их типов. MIDL пришел на смену языку ODL (Object Description Language)
и его компилятору MkTypeLib. Кроме тогЪ, вы можете встретить упоминания о стандарте
DCE RFC IDL (Distributed Computing Environment Remote Procedure Call Interface
Definition Language), который тоже устарел, так как не поддерживает определений,
связанных с объектами.
При использовании
технологий Microsoft вы всегда должны быть готовыми к тому, что для обозначения
тех же самых или слегка модифицированных понятий изобретаются абсолютно новые
термины, носящие, на мой взгляд, более рекламный, чем смысловой характер. Делая
заплату на какие-то явные (или не очень) промахи, целесообразно представить
ее в виде новой, даже революционной, технологии, так как этот факт повышает
marketability (конкурентоспособность). Но для разработчика это означает лишь
дополнительные усилия на выделение истинной сути новшеств и поиск тождественных
или сходных понятий, без которых трудно выстроить более или менее стройную модель
или структуру, призванную помогать в разработке приложений.