Это страница обсуждения для обсуждения улучшений статьи Component Object Model . Это не форум для общего обсуждения темы статьи. |
|
Найти источники: Google (книги · новости · ученые · бесплатные изображения · ссылки WP) · FENS · JSTOR · TWL |
Эта статья имеет рейтинг C-класса по шкале оценки контента Википедии . Она представляет интерес для следующих WikiProjects : | |||||||||||||||||||||||||||||||||||||
|
A summary of this article appears in Internet Explorer. |
«Другие библиотеки и языки, поддерживающие COM, включают Microsoft Foundation Classes, VBScript, Visual Basic, ECMAScript (JavaScript) и Delphi».
JScript технически более точен, чем Javascript, поскольку COM использует реализацию и расширение ECMAScript от Microsoft, а не от Netscape.
Есть также «более легкий» способ использования COM. Согласно спецификации COM (черновая версия 0.9 от октября 1995 года, которая, похоже, больше не доступна от Microsoft, но вы можете получить ее на этой странице archive.org), объекты COM не обязательно должны быть экземплярами классов COM или CoClasses (см. главу 3.6 спецификации COM). Пока объект поддерживает хотя бы один интерфейс COM, его можно назвать объектом COM. Его класс не обязательно должен быть общедоступным для создания экземпляров. Поэтому интерфейсы COM можно использовать как эффективное средство связи с любыми приложениями или библиотеками DLL. Он объектно-ориентированный, в отличие от простых функций API DLL. Многие приложения используют интерфейсы COM внутри. Знаете ли вы, что интерфейсы объектов Borland Delphi по умолчанию совместимы с COM, даже если вы не утруждаете себя работой с CoWhatever? Интерфейсы COM — это простая, но очень мощная концепция.
Это все хорошо и здорово — перенаправлять из OCX в COM, но нигде в этой статье не говорится, что такое OCX-файл на самом деле? DLL, которая реализует какие-то интерфейсы?
Я рассматривал возможность написания HTA (HTML-приложений). По сути, это приложения, созданные путем локального запуска веб-страницы со скриптом, полностью за пределами изолированной программной среды безопасности.
Это классный способ программирования, потому что, как обнаружили программисты PHP, нет более простого способа сгенерировать пользовательский интерфейс, чем выдать HTML. А DHTML — это классный способ написать скрипт пользовательского интерфейса.
Но поскольку в JavaScript нет библиотек для доступа к системе, вам необходимо ссылаться на библиотеки COM во время выполнения для каждой не связанной с Интернетом задачи, которую вы хотите выполнить.
Это должно быть легко, поскольку Microsoft поставляла библиотеки COM для всего, и так было всегда.
Но попробуйте найти документацию о том, КАКИЕ существуют библиотеки COM, какие у них интерфейсы, какие версии поставляются с какой версией Windows. ДОКУМЕНТАЦИИ НЕТ!
Добавьте к этому тот факт, что у COM-объектов нет отражения, и вы получите безумную ситуацию.
Это как быть сантехником, за исключением того, что вы можете заказывать фитинги только по номеру, и вам не разрешено видеть каталог. Ах да, и номера каталогов имеют длину 64 бита. -- неверно: на самом деле они имеют длину 128 бит
Кто-нибудь может мне помочь?
CafeAlpha@nightstudies.net
На самом деле, немного неточно говорить, что .NET — это замена COM. .NET не только делает гораздо больше, чем COM, COM+ все еще жив и здоров, и Microsoft все еще поощряет его использование в корпоративных приложениях. Написание объектов COM+ в .NET — это распространенный способ сделать это, так что эти две технологии скорее дополняют друг друга, чем конкурируют. ShaneKing 12:42, 3 февраля 2004 (UTC)
может кто-нибудь написать упрощенный раздел? первый абзац читается как инопланетный язык.
Я не уверен, является ли ActiveX синонимом COM. Разве он не основан на COM, как и DirectX ? -- GatesPlusPlus 11:26, 6 февраля 2005 (UTC)
Я где-то читал или слышал, что существует больше нехороших применений ActiveX, чем законных. Это правда? - x42bn6 8 июля 2005 04:15 (UTC)
Текст выглядит так, будто взят прямо из MS:
Что такое Active-X
Что такое ActiveX?
ActiveX — это набор технологий от Microsoft, который позволяет создавать интерактивный контент для Всемирной паутины. До появления ActiveX веб-контент представлял собой статичный двухмерный текст и графику. С ActiveX веб-сайты оживают с помощью мультимедийных эффектов, интерактивных объектов и сложных приложений, которые создают пользовательский опыт, сравнимый с высококачественными заголовочными компакт-дисками. ActiveX обеспечивает связующее звено, которое связывает воедино широкий ассортимент технологических строительных блоков для обеспечения работы этих «активных» веб-сайтов. Каковы его основные преимущества?
* Активный веб-контент, оказывающий влияние, который будет привлекать и удерживать пользователей. * Открытая кроссплатформенная поддержка операционных систем Macintosh®, Windows® и UNIX®. * Знакомые инструменты из широкого ассортимента инструментов и поставщиков языков программирования, включая Visual Basic®, Visual C++®, Borland® Delphi®, Borland C++, Java и инструменты с поддержкой Java. Разработчики могут использовать то, что они знают, и немедленно приступить к работе. * Существующий перечень элементов управления ActiveX доступен сегодня для немедленного использования веб-производителями. * Отраслевые стандарты со встроенной поддержкой ключевых отраслевых и фактических рыночных стандартов, включая HTML, TCP/IP, Java, COM и другие.
Каковы его элементы?
ActiveX включает в себя как клиентские, так и серверные технологии.
* Элементы управления ActiveX — это интерактивные объекты на веб-странице, которые предоставляют интерактивные и (UTC)управляемые пользователем функции и, таким образом, оживляют восприятие веб-сайта. * Документы ActiveX позволяют пользователям просматривать документы, отличные от HTML, такие как файлы Microsoft Excel или Word, через веб-браузер. * Активные сценарии управляют интегрированным поведением нескольких элементов управления ActiveX и/или Java-апплетов из браузера или сервера. * Виртуальная машина Java™ — это код, который позволяет любому браузеру с поддержкой ActiveX, например Internet Explorer 3.0, запускать апплеты Java и интегрировать апплеты Java с элементами управления ActiveX. * ActiveX Server Framework предоставляет ряд функций на базе веб-сервера, таких как безопасность, доступ к базе данных и другие.
Что он может сделать?
ActiveX привносит инновации и интерактивность в Интернет. Поскольку он поддерживается многими различными языками и инструментами, он позволяет разработчикам с различным опытом и опытом привносить свое творчество в Интернет. Основанный на усовершенствовании существующего стандарта COM, уже известного тысячам разработчиков, он может использовать знания и работу сообщества разработчиков без крутой кривой обучения. И поскольку это технология третьего поколения с обширной сторонней поддержкой, он предоставляет самую богатую платформу разработки как для Интернет-, так и для интранет-приложений клиент/сервер, доступных сегодня. ActiveX принимает самые творческие и инновационные усилия по разработке программного обеспечения и позволяет им бесперебойно работать вместе на веб-сайте. С тысячами этих программных компонентов, которые уже существуют, захватывающая коллекция интерактивных объектов доступна для немедленного использования веб-производителями. Почему это важно?
ActiveX позволяет разработчикам и веб-производителям быстро и легко создавать уникальные интерактивные веб-сайты, которые сделают Интернет принципиально более полезным и продуктивным. Веб-производителям не нужно начинать с нуля и вручную создавать все части своего интерактивного веб-сайта, поскольку на рынке уже доступно более 1000 повторно используемых элементов управления. И поскольку ActiveX можно использовать с широким спектром языков программирования от десятков поставщиков, разработчики и веб-мастера могут использовать свой текущий опыт для более быстрого создания привлекательного контента. Они также могут охватить широкий круг пользователей, поскольку ActiveX будет поддерживаться на нескольких платформах операционных систем. Как это соотносится с Java?
ActiveX предоставляет стандартный механизм для расширения любого языка программирования, включая Java. ActiveX расширяет возможности языка Java, позволяя разработчикам Java интегрировать свои апплеты с богатством ActiveX. ActiveX связывает апплеты Java с объектами, созданными на других языках, так что программисты Java могут напрямую ссылаться на элементы управления ActiveX из своих программ Java. По той же причине объекты, написанные на других языках программирования от разных поставщиков, могут ссылаться на апплеты Java. ActiveX является связующим звеном, которое связывает их все вместе, предоставляя самые мощные веб-технологии на открытой интегрированной платформе. Предоставляя общий способ расширения и связывания языков программирования, включая Java, ActiveX максимизирует ресурсы разработчиков для интерактивной веб-разработки. См. ActiveX и Java для получения дополнительной информации о расширении Java с помощью ActiveX. Кто поддерживает?
В настоящее время малые, средние и крупные компании-разработчики программного обеспечения создают элементы управления ActiveX, включая такие компании, как Borland, Oracle и Sybase/Powersoft. В результате их работы сегодня существует более 1000 существующих элементов управления ActiveX, доступных для использования веб-производителями. Кроме того, 14 компаний, создающих инструменты веб-дизайна и разработки, встроили поддержку ActiveX в свои продукты, что позволяет их клиентам как создавать, так и использовать элементы управления ActiveX в своих программах. Microsoft Internet Explorer поддерживает ActiveX, а Microsoft предоставляет подключаемый модуль ActiveX для Netscape® Navigator®, что позволяет самому широкому кругу пользователей Интернета просматривать веб-страницы с поддержкой ActiveX. Где это работает?
ActiveX в настоящее время поддерживается в операционной системе Windows. Microsoft работает с Metrowerks для поддержки ActiveX на платформе Macintosh, а также работает с Bristol и Mainsoft для поддержки на платформах UNIX. Разработчики, которые пишут элементы управления ActiveX и другие объекты ActiveX, смогут охватить максимально широкую аудиторию пользователей с помощью этого кроссплатформенного решения.
так что это, вероятно, copyvio и его нужно будет переработать... -- RN 07:30, 30 июля 2005 (UTC)
Поскольку местоположение каждого компонента хранится в системном месте (реестре Windows), может быть установлена только одна версия определенного компонента. Таким образом, COM серьезно страдает от DLL hell, когда два или более приложений требуют разные версии одного и того же компонента. Неправильно. Это решение разработчика компонента, если он хочет зарегистрировать новую версию компонента под старым именем версии, и это неправильное решение, если компоненты несовместимы.
Типичная установка Windows имеет установленные MS XML 2.0, 3.0 и 4.0, которые прекрасно работают вместе. Также у COM есть функция "Component Categories" http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnesscom/html/componentcategories.asp, которая позволяет не задавать жестко используемые имена компонентов в приложении.
Кроме того, поскольку COM интенсивно использует реестр, он чувствителен к повреждению реестра. И большинство программ чувствительны к повреждению файловой системы. В чем смысл?
В COM нет DLL-ада, поскольку интерфейсы и соклассы ссылаются на них с помощью их GUID, а не имен, а сами DLL могут располагаться где угодно в системе. Таким образом, по крайней мере, утверждение статьи о том, что "поскольку местоположение каждого компонента хранится в системном месте ( реестре Windows ), может быть установлена только одна версия определенного компонента", является совершенно неверным - и это единственное утверждение, которое сделано в разделе "DLL hell", поэтому я его полностью удалил. Тем не менее, он был быстро вставлен обратно. Не могли бы вы объяснить, что тогда означает "DLL hell" в отношении COM? -- int19h 07:35, 30 апреля 2007 (UTC)
Легко - если у вас в системе установлен OOActiveXControl v2, то вы устанавливаете OldApp 2001, и он регистрирует OOActiveXControl v1, приложения, которые зависят от интерфейсов и классов в OOActiveXControl DLL v2, будут ломаться, когда не смогут их найти. Также есть случай плохо написанных компонентов, которые меняют поведение между версиями без увеличения имен интерфейсов и т. д. Нельзя сказать, что он неуязвим для DLL hell, но вы, вероятно, могли бы перефразировать большую часть текста, чтобы сделать его более понятным. MatthewMastracci 22:22, 30 апреля 2007 (UTC)
DLL hell, как описано выше, был очень распространенным явлением в версиях операционных систем Microsoft до Windows 2000, основной причиной которого было то, что операционная система не ограничивала установку DLL. От установщиков приложений ожидалось, что они будут добросовестными гражданами и будут проверять информацию о версии DLL перед перезаписью существующих системных DLL. Стандартные инструменты для упрощения развертывания приложений (которое всегда включает отправку зависимых DLL операционной системы) предоставлялись Microsoft и другими сторонними поставщиками инструментов. Microsoft даже требовала от поставщиков приложений использовать стандартный установщик и сертифицировать свою программу установки для корректной работы, прежде чем им будет предоставлено право использовать логотип Microsoft. Подход добросовестного установщика не смягчил проблему, поскольку рост популярности Интернета предоставил больше возможностей для получения несоответствующих приложений.
Но если спецификация разработана с конкретным намерением положить конец DLL hell, и если она эффективно предоставляет программистам средства для этого, то ошибочно рассматривать спецификацию как ВКЛАДЧИКА в эту проблему. Тот факт, что программисты сталкиваются с трудностями в соответствии со спецификациями (и признанными "лучшими практиками"), не имеет значения. Если бы люди всегда тщательно следовали спецификации (и рекомендациям по установке/регистрации), DLL Hell не было бы. Учитывая бесчисленное множество сценариев, это почти невозможно (отсюда и DLL hell), но можно было бы по крайней мере упомянуть, что она предоставляет ПУТЬ к этой цели, где необработанные DLL делали/не делают. — Предыдущий неподписанный комментарий, добавленный Powermonger666 ( talk • contribs ) 13:14, 21 января 2011 (UTC)
Эта статья может быть хороша сама по себе (или нет, у меня нет опыта, чтобы это утверждать), но разве энциклопедия не должна объяснять что-то людям, которые еще не понимают предмет?
Я своего рода программист, в основном самоучка, но довольно опытный. Но я в основном из мира Unix. Я бы очень хотел, чтобы была статья в Википедии, которая бы объяснила некоторые из алфавитного супа технологий Microsoft людям, которые еще не знают большую часть из них. Я могу щелкать ссылки весь день в этих статьях Википедии, от COM до OLE, от WinFX до .NET, но все они, похоже, ссылаются друг на друга, и никто из них не объясняет это не экспертам Windows.
--Headybrew 11:05, 29 мая 2006 (UTC)
«Кроме того, компонент COM теоретически всегда должен иметь лучшую производительность, чем соответствующий управляемый компонент .NET».
Это действительно так? Теоретически .NET быстрее, так как не требует, чтобы каждый вызов функции был виртуальным, и не нужно постоянно AddRef/Release ссылок на объекты.
Эту статью нужно немного подчистить, особенно раздел «История», который имеет тенденцию повторяться довольно часто. Также я удалил строку «Кроме того, компонент COM теоретически всегда должен иметь лучшую производительность, чем соответствующий управляемый компонент .NET», потому что это спорное и необоснованное утверждение. В зависимости от того, с кем вы говорите, некоторые люди скажут, что JIT-скомпилированные языки теоретически должны быть быстрее, чем изначально скомпилированные языки, потому что язык JIT имеет возможность для машинно-специфических оптимизаций. Без какой-либо ссылки это просто шум, который на самом деле ничего не добавляет к статье.12.34.246.4 22:25, 30 ноября 2006 (UTC)
COM имеет грязную историю. Он оставил след технологий, который будет с нами долгие годы. Все началось, когда было решено, что было бы хорошей идеей, если бы можно было, например, встроить электронную таблицу в документ текстового процессора, чтобы обновления электронной таблицы автоматически обновляли документ. В то же время программные компоненты как решение проблемы повторного использования кода были очень многообещающими. От программистов ожидалось, что они освоят заклинания среды, создание экземпляров, проверку интерфейсов, изящную деградацию функции в случае, если последняя версия объекта недоступна, подсчет ссылок и так далее и тому подобное. После того, как все это сделано, остается еще одна мелкая деталь — убийство дракона, которого должна убить программа, которую пытаются разработать. В COM не хватает простоты размышлений, которая позволяет программисту принимать решения во время выполнения на основе того, что предлагается в библиотеке COM. Вот в чем превосходен .NET Framework и почему COM — это прошлое, а .NET Framework — настоящее и будущее.--151.200.244.58 18:38, 2 декабря 2006 (UTC)
COM — это не «прошлое». Все, что обсуждает этот парень, верно (кроме «отражения», как отмечено ниже), но он предполагает среду выполнения. Со средой выполнения все проще. Без среды выполнения приходится решать перечисленные выше проблемы, и это В ОСНОВНОМ, чем и является «COM» — способом решения этих проблем для компонентов, скомпилированных машиной. Он все еще широко используется (например, DirectX). — Предыдущий неподписанный комментарий, добавленный Powermonger666 ( talk • contribs )
COM поддерживает нечто похожее на то, что мы называем "Reflection" в .NET. Это называется TypeLibraries. COM с самого начала поддерживал эту концепцию запроса "типа" объекта, при условии, что объект поддерживал интерфейсы ITypeLib/ITypeInfo. Также COM поддерживает популярный IDispatch для реализации автоматизации в компонентах, что делает их доступными в скриптовых языках. 72.78.10.98 10:03, 13 марта 2007 (UTC)Виджай Рави
Apprently, .NET CLR — это объект DCOM, ссылающийся на Windows Internals пятого издания, так почему же .Net обесценивает COM? Так что COM — это не .Net не заменяет COM, это оболочка для COM .. — Предыдущий неподписанный комментарий добавлен Bibo1978 (обсуждение • contribs ) 13:27, 31 мая 2010 (UTC)
В разделе ".NET" говорится: "Некоторые службы, предоставляемые COM+, были в значительной степени заменены недавними выпусками .NET. Например, пространство имен System.Transactions в .NET предоставляет класс TransactionScope, который обеспечивает управление транзакциями без обращения к COM+". Но это не так. System.Transsactions — это способ использования COM+ Enterprise Services в .NET. — Предыдущий неподписанный комментарий добавлен Powermonger666 ( talk • contribs ) 18:33, 21 января 2011 (UTC)
При визуализации COM-объектов часто рисуют симпатичные маленькие диаграммы, например:
______________________ | ____________ | | | | |O-+-----|ИнтерфейсA | | | |____________| | | ________________ | | | ____________ | | | | | | | | | O-+-| ИнтерфейсB | | | | | |____________| | | | | ____________ | | | | | | | |O-+---+-|ИнтерфейсC | | | | | |____________| | | | |________________| | |______________________|
Поскольку они так широко используются, разве не имеет смысла привести пример в статье? Не как ужасное ASCII-искусство, конечно, а как SVG? Shinobu 03:47, 27 июня 2007 (UTC)
Примечание: вы также часто видите подобные вещи, например, в документации Microsoft.
О ______|_ | |ИнтерфейсA O--| | | |ИнтерфейсC O--| | |________|
Верхний круг представляет IUnknown. Shinobu 07:56, 4 июля 2007 (UTC)
Учитывая количество статей в Википедии, которые можно отнести к категории COM, как насчет создания категории «Модель компонентных объектов», подобной той, что есть в .NET? — Предыдущий неподписанный комментарий, добавленный Xpclient ( обсуждение • вклад ) 09:51, 4 февраля 2008 (UTC)
В этой статье полностью игнорируется уровень DCE RPC, из которого развился COM. В частности, игнорирование этого факта исключает тот факт, что основные части истории COM не являются частью Microsoft. —Предыдущий неподписанный комментарий добавлен 202.160.48.164 ( обсуждение ) 20:21, 18 декабря 2008 (UTC)
DCOM основан на DCE RPC (и это, безусловно, следует упомянуть), а COM — нет. — Предыдущий неподписанный комментарий добавлен 86.178.56.128 ( обсуждение ) 21:19, 9 марта 2010 (UTC)
Неужели действительно нужно цитировать каждый абзац? Кто-нибудь думает, что нам следует удалить большую часть этих ссылок?
Мне бы очень хотелось, чтобы аннотация к COM+ была более подробной и подробной. Я только что начал работать в компании с корпоративным приложением, которое в значительной степени опирается на COM+, и я надеялся уйти с лучшим пониманием того, как оно работает и почему его стоит использовать.
Chrisfeohpatti (обсуждение) 16:03, 30 марта 2009 (UTC)
Хотя удаленное управление/маршалинг — это распространенная проблема, которую решают как .NET, так и COM, я не вижу, как COM устарел в пользу .NET. .NET ни в коем случае не является альтернативой COM для собственной разработки, даже после введения C++/CLI (из-за зависимости от .NET Fx). —Предыдущий неподписанный комментарий добавлен 41.235.169.14 (обсуждение) 23:11, 17 июля 2009 (UTC)
Есть ли где-нибудь эта спецификация? Похоже, все знают подробности (поскольку они пишут COM-совместимые компиляторы/библиотеки), но никто ничего не говорит! Какая отвратительная... — Vano 10:30, 27 января 2010 (UTC)
Этот раздел начинается с "COM стандартизирует процесс инстанцирования (т.е. создания) объектов COM, требуя использования фабрик классов". Фабрики классов абсолютно НЕ требуются для создания объектов.
Пример 1: Многие системные COM-объекты создаются с помощью вызова API (например, CoGetMalloc).
Пример 2: В объектной модели документа, реализованной в COM, корневой объект может иметь фабрику, но другие объекты создаются с использованием методов корня. — Предыдущий неподписанный комментарий добавлен 86.178.56.128 ( обсуждение ) 21:32, 9 марта 2010 (UTC)
В 1995 году Bristol Technology, Inc. разработала технологию OLE1 для использования на платформах UNIX. Однако, когда MS выпустила OLE2, Microsoft подняла сборы до уровня, на котором BT стало не по карману продолжать разработку OLE2. См. соответствующую статью на http://www.techlawjournal.com/courts/bristol/Default.htm Wheger ( talk ) 20:27, 18 марта 2010 (UTC)wheger
Я всегда задавался вопросом, как некоторые объекты являются допустимыми объектами DCOM (например, объекты, созданные VB6), а некоторые объекты могут использоваться только локальным COM (например, все объекты MS Office). Если бы вы могли DCOM в DAO (объект базы данных MS), вы могли бы настроить сервер сетевой базы данных DAO: Вы не можете этого сделать из-за некоторых различий в объекте. Но ничего здесь или в DCOM, чтобы объяснить, чем отличается интерфейс. 122.107.141.71 (обсуждение) 23:52, 11 октября 2010 (UTC)
Я не добавляю их напрямую в статью, поскольку у меня нет вторичных источников.
85.131.104.149 (обсуждение) 06:59, 25 июня 2013 (UTC)
Пришел в поисках описания разницы между 32-битным COM и 64-битным COM (и возможно ли преобразование COM+) — Предыдущий неподписанный комментарий добавлен 203.206.162.148 ( обсуждение ) 05:47, 24 марта 2017 (UTC)
Здравствуйте, уважаемые википедисты!
Я только что изменил одну внешнюю ссылку на Component Object Model . Пожалуйста, уделите немного времени, чтобы просмотреть мои правки. Если у вас есть какие-либо вопросы или вам нужно, чтобы бот игнорировал ссылки или страницу в целом, посетите этот простой раздел FaQ для получения дополнительной информации. Я внес следующие изменения:
Закончив просмотр моих изменений, вы можете следовать инструкциям в шаблоне ниже, чтобы исправить любые проблемы с URL-адресами.
Это сообщение было опубликовано до февраля 2018 года . После февраля 2018 года разделы страниц обсуждения "Внешние ссылки изменены" больше не генерируются и не отслеживаются InternetArchiveBot . Никаких специальных действий в отношении этих уведомлений страниц обсуждения не требуется, кроме регулярной проверки с использованием инструкций инструмента архивации ниже. Редакторы имеют право удалять эти разделы страниц обсуждения "Внешние ссылки изменены", если они хотят очистить страницы обсуждения от загромождения, но перед выполнением массовых систематических удалений ознакомьтесь с RfC . Это сообщение динамически обновляется через шаблон (последнее обновление: 5 июня 2024 г.) .{{source check}}
Привет.— InternetArchiveBot ( Сообщить об ошибке ) 19:23, 11 августа 2017 (UTC)