Мне нужно изучить COM для моего текущего проекта. Я новичок, и я не смог найти хорошие отправные точки для COM. Я изучал MSDN и гуглил ... Я нашел несколько интересных статей на codeproject.com, но я не удовлетворен. Почему мы используем COM? Почему это существует? В каких местах он существует? ..... и так далее. Итак, скажите, пожалуйста, где я могу найти ответы на эти вопросы?
13
Ответы:
Изучение IUnknown является первым шагом.
Хорошим COM-интерфейсом, который подходит для начинающих, является интерфейс IStream. Вы можете попрактиковаться в COM, внедрив интерфейс IStream, используя множество способов хранения данных.
Добавлено 2012/09/28:
После того, как механизм COM был изобретен, люди в Microsoft обнаружили, что эти механизмы открывают двери для необычных уловок программирования, которые не являются ортодоксальными ООП. На самом низком уровне
IUnknown.QueryInterface
это просто метод; это может сделать что угодно. Эти приемы делают COM пугающим для учеников, потому что они могут сделать недействительными основные рассуждения, которые можно позаимствовать у ООП.Документация Microsoft на MSDN тратит много времени, говоря, что «COM is not ...» или «не делайте предположений», объясняя, как эти необычные трюки могут сломать ваш код.
Разработчики COM используют принцип подстановки Лискова («L» в SOLID ), чтобы убедиться, что их множественные интерфейсы и использование трюков не лишают законной основы ООП или работу программы.
Если ваш проект не использует эти приемы, то можно увидеть COM только с точки зрения ООП. Если ваш проект использует эти приемы, вам нужно будет видеть COM как самоизменяющийся код.
источник
Основная причина COM заключается в предоставлении объектно-ориентированного интерфейса связи между приложением и другими приложениями и библиотеками DLL, которые могут находиться в разных пространствах памяти, а также между объектами, которые могут иметь разные представления внутренних объектов.
При изучении COM нужно помнить, что в то время C ++ был королем, а приложения, называемые dll, использовали C. Не было общего ABI (как говорит @rwong), а COM был решением Microsoft.
Вероятно, стоит взглянуть на Active Template Library (ATL) для visual studio, что также упрощает использование COM.
Несколько книг, которые я нашел полезными в те дни
http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1
http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4
НТН
источник
Изначально я узнал о COM из книги « Изучение DCOM» (DCOM - это просто расширение COM, книга в основном о COM). Ему более десяти лет, и он должен быть дешевым, если вы его используете (поскольку COM уже не совсем горячий, даже в мире Microsoft, хотя он все еще используется для взаимодействия).
Основная причина существования COM - облегчение разработки на основе компонентов, что в основном означает, что вместо компоновки библиотек при компиляции кода вы ссылаетесь на интерфейс (описание взаимодействия с внешним компонентом) и используете некоторую реализацию что при развертывании. Он лежит в основе большинства собственных технологий Microsoft.
Система поддерживает некоторые функции, которые были хороши до того, как все стало управляемым (например, подсчет ссылок и самоописание (через IDispatch)).
источник
COM - это стандарт, созданный в 90-х годах, чтобы позволить различным программам общаться друг с другом. Наиболее важным является двоичный стандарт, который позволяет одному программному обеспечению создавать или связывать объект, а затем вызывать этот интерфейс. Это позволяет вам делать такие вещи, как создание библиотеки DLL на C ++, которую можно вызывать на странице ASP (объекты COM), или создание элемента управления в Delphi, который можно поместить в диалоговое окно VB (элементы управления ActiveX) или на лист Excel. Когда вы вставляете изображение в Word, оно тоже использует COM, встраивая отдельное приложение в Word. Менее популярным является DCOM, который должен вызывать удаленные объекты, обычно есть более простые способы сделать это.
Итак, 10 лет назад Com / ActiveX / DCOM были очень популярны среди VB, VBA, C ++ / ATL, Delphi. Dotnet намного проще, хотя C # заменил большинство использования COM, VB и т. Д.
Тем не менее, существует множество COM-интерфейсов, которые вы можете вызывать из приложения dotnet, Java или C ++. (Вы не говорите)
Если вам нужно вызвать COM-интерфейсы, VB - самый простой способ сделать это. В Dotnet 4.0 C # имеет ключевое слово dynamic, которое значительно упрощает вызов интерфейсов IDispatch, что, вероятно, является отличным решением, на которое следует обратить внимание.
Если вам нужно знать много деталей, вам действительно нужно использовать C ++ и ATL, вызвать API-интерфейсы C, такие как CoCreateInstance. Избегайте этого, если вы можете использовать его как старую технологию и не очень много, придерживайтесь рекомендаций выше.
Я не уверен, какое программное обеспечение для мониторинга вы просматриваете, но оно, вероятно, будет доступно через классы System.Management в dotnet.
источник
Следующее может быть полезным COM обзорM:
http://www.youtube.com/watch?v=-uodiz25YNE
http://progtutorials.tripod.com/COM.htm
Первое видео рассказывает об общей идее создания бинарных компонентов для повторного использования кодов, написанных на разных языках (не зависящих от языка) и находящихся на разных машинах (процессах) (не зависящих от местоположения / прозрачных). Эта технология используется в некоторых софтверных компаниях для интеграции с другим программным обеспечением (компаниями) вместо того, чтобы покупать их программное обеспечение и встраивать их в свои собственные или писать коды с нуля в своих системах.
Эта технология имеет три разные версии (реализации):
OLE / COM / DCOM / ActiveX для разработчиков на C ++ (ATL используется для облегчения работы программиста)
JavaBeans / RMI / EJB для разработчиков Java
CORBA / IIOP
Просто думайте об этом как о технологии, которая пригодится, когда у вас есть программное обеспечение, написанное на Java, и вы хотите добавить к нему функциональность, которая уже существует в пакете, но написана на C ++ и даже, возможно, находится на другом компьютере, а не в ваша локальная машина. Как вы называете «новым», как вы делаете объекты и вызываете методы из них?
Следующие книги, которые я видел у людей, занимающихся кодированием COM, имеют одну из них на своих полках:
Семинар разработчика для COM и ATL 3.0
Внутри ком
Essential COM
источник