Вопрос

Я подумываю изучить COM.Но я слышал, что Microsoft запустила .NET в качестве альтернативы COM.Так стоит ли изучать COM?на самом деле я начал изучать COM для драйвера устройства UMDF.Есть ли какой-нибудь альтернативный способ работы с UMDF, кроме COM?

Это было полезно?

Решение

UMDF - это платформа для разработки драйверов устройств пользовательского режима.Я думаю, что ключевым требованием к драйверу устройства является:загружайтесь быстро.Я не хочу откладывать время запуска только потому, что у меня есть обалденный драйвер устройства, который должен загружать и JIT .NET framework (предварительно загруженный, но, тем не менее).

Конечно, вы тоже можете разрабатывать раздутые com-библиотеки, но, будучи компетентным, вы можете избежать этого.Вы не можете избежать .NET runtime.

Таким образом, даже если UMDF разрешен для разработки .NET, я на данный момент не хотел бы, чтобы драйверы устройств были написаны в .NET.

Не поймите меня неправильно.Я люблю .NET.Я просто не думаю, что это так хорошо сочетается с драйверами устройств, даже если мы говорим о драйверах пользовательского режима.

Когда я смотрю на COM, я думаю, это помогает понять, почему он был разработан:обеспечить совместимость между компонентами, разработанными в различных средах.Это было еще в 80-х.На протяжении многих лет люди жаловались на COM, но на самом деле он очень успешен в этом.Были некоторые ошибки в модели развертывания COM (т. Е. зависимость от реестра) и другие интересные варианты дизайна, которые заставили разработчиков почесать затылки.Тем не менее, ядро COM (т. Е. IUnknown) по-прежнему работает IMO.

Другие советы

COM старый, утомительный и расстраивающий. Я не думаю, что кто-то когда-либо любил работать с COM. Так что, как правило, я бы порекомендовал против изучения этого, если у вас действительно не убедительная причина. Если есть библиотека COM, что вам нужно использовать, я вместо этого узнаю, как использовать его через COM Interop, что позволяет работать с COM из .NET.

Быть понятным, .NET было очень призвано быть заменой для COM. И это хорошо сработало, это было очень успешно. Но ком повсюду В Windows вы не можете встрять палку в типичную программу и не запускаться в Com где-то. Это начинается с самого первого бита кода в любой программе .NET GUI, [Stathread].

В Windows много и много вещей, которые еще не получили дружелюбную обертку. Это не всегда нужно, CLR имеет отличную поддержку Com Interop. Вполне видимый из диалогового окна Add Reference, вкладка COM заполнена вкусностями. Но то, что вы видите в этом списке, являются компонентами, которые были специально разработаны, чтобы быть простым в использовании из Любые среда выполнения. Они реализуют подмножество COM под названием «OLE Automation».

Автоматизация - это очень ограниченное подмножество, он работает так хорошо, потому что то, что вы на самом деле можете сделать, это ограничено. Однако есть голы кода, которые не подходят для этого подмножества. Вид, для которого вы не можете найти библиотеку типа. Без библиотеки типа вы облажались в .NET. Наиболее видимым компонентом с этой проблемой является оболочка. Проводник Виндоус. Написание расширения оболочки в управляемом коде жесткий.

Вопрос в том, что объявления COM интерфейса изначально были разработаны для хорошо работать на компиляторе, который реализует множественное наследование. C ++ специально. Декларация интерфейса .Net хорошо не отображает интерфейс COM, если этот интерфейс COM был получен из другого интерфейса COM. CLR генерирует неправильный v-таблицу. Это касается в этом MSDN Журнал Статья, Поэтому, хотя вывод автора вполне неправильно.

Ты могу Напишите декларации интерфейса COM на уровне .NET и реализуйте их. Это просто то, что вы получаете нет помочь вообще от SDK. И что вам нужно будет знать Com довольно хорошо, чтобы получить их правильно.

UMDF подходит этой модели тоже, его интерфейсы получают из Iunknown. Нет библиотеки типа. Нет управляемой обертки, о которой я знаю. Ты мог Напишите свой код в C #, но вам придется писать все интерфейсные объявления самостоятельно. Реально здесь относится только C ++.

Да, вам нужно научиться ком.

COM был полезен, потому что это позволило вам построить язык, независимый от языка, который можно потреблять с нескольких языков. Теперь .NET используется для примерно на целях сампе, хотя оно менее доступна. Если вы программируете .NET, многие COM API «просто работа», хотя полезно получить некоторое основное понимание того, как Com работает (так, что COM использует RefCounting для управления памятью, тогда как .NET использует сборку мусора).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top