Фон
В C # интерфейс по определению пуст и имеет много возможных реализаций. Обычно в COM интерфейс имеет одну реализацию и определяет контракт вызова, а не контракт реализации (например, с веб-службами или CORBA). В C # реализация интерфейса зависит от .NET. В COM реализация интерфейса не зависит от языка, но является двоичной реализацией (в отличие от сообщений SOAP, которые являются текстовыми / XML). Это двоичное определение всегда было пищей для критиков COM и медленного (если вообще) принятия COM в системах, отличных от Windows (опять же, в отличие от веб-служб).
Практически для всех команд IDL в C # есть эквивалентная возможность, хотя и не всегда внутри интерфейса. Базовым интерфейсом COM всегда является IUknown
, который используется для подсчета ссылок на объекты, который должен быть включен всеми объектами COM.
В речи, когда речь идет о COM-интерфейсе, вы обычно говорите о реализации. В c # вы обычно говорите о пустых контрактах, которые понимают вызывающие и реализаторы.
Перевести IDL
IDL выше для DOM, как вы упоминаете. DOM реализован на C # и намного мощнее своих собратьев COM (и многих версий). Если вы действительно хотите создать оболочку класса C #, которая может вызывать интерфейсы COM DOM:
- использовать MIDL (поставляется с Visual Studio) для создания TLB,
- затем запустите tlbimp.exe (поставляется с .NET), чтобы создать оболочку .NET COM, которую вы можете включить в свой проект.
Вы также можете запустить tlbimp.exe непосредственно на COM-библиотеках (в процессе) или исполняемых файлах (вне процесса) для создания .NET COM Wrapper.
Дополнительная информация
Основное, но чрезвычайно блестящее и подробное введение в COM - это знаменитая книга Дона Бокса Essential COM , о IDL. Я предлагаю Essential IDL от Gudgin .
Абсолютно все, что нужно знать о COM и .NET, записано в всеобъемлющем, но слегка раздутом .NET и .COM Полном руководстве по взаимодействию Натана. Это не книга, которую вы будете читать от корки до корки, но она является отличным справочным материалом.