Чтобы было ясно, .NET очень задумывался как замена COM. И это сработало, это было очень успешно. Но COM - везде в Windows, вы не можете встряхнуть палку в типичной программе и не столкнуться с COM где-нибудь. Это начинается с самого первого куска кода в любой программе .NET GUI, [STAThread].
В Windows есть множество вещей, которые еще не получили дружественную оболочку .NET. Это не всегда необходимо, CLR имеет отличную поддержку взаимодействия COM. Видно из диалогового окна Добавить ссылку, вкладка COM заполнена вкусностями. Но то, что вы видите в этом списке, - это компоненты, специально разработанные для простоты использования из любой среды выполнения. Они реализуют подмножество COM, называемое «OLE Automation».
Автоматизация является очень ограниченным подмножеством, она работает так хорошо, потому что то, что вы на самом деле можете сделать, ограничено. Однако есть куски кода, которые не соответствуют этому подмножеству. Вид, для которого вы не можете найти библиотеку типов. Без библиотеки типов вы ввернуты в .NET. Наиболее заметным компонентом с этой проблемой является оболочка. Проводник Виндоус. Написание расширения оболочки в управляемом коде: hard .
Проблема заключается в том, что объявления интерфейса COM изначально были разработаны для хорошей работы на компиляторе, который реализует множественное наследование. С ++ конкретно. Объявление интерфейса .NET плохо отображается на интерфейс COM, если этот интерфейс COM был получен из другого интерфейса COM. CLR генерирует неправильную v-таблицу. Об этом говорится в статье журнала MSDN , хотя авторское заключение совершенно неверно.
Вы можете писать объявления интерфейса COM на языке .NET и реализовывать их. Просто вы получаете нет помощь вообще из SDK. И что вам нужно знать COM очень хорошо, чтобы понять их правильно.
UMDF также подходит для этой модели, его интерфейсы получены из IUnknown. Нет библиотеки типов. Никакой управляемой обертки, о которой я знаю. Вы могли бы написать свой код на C #, но вам придется написать все объявления интерфейса самостоятельно. Реально, только C ++ применяется здесь.
Да, вам нужно выучить COM.