nitrous_007 Ответов: 4

Моя компания использует com (component object model) для всего. Это старая технология?


My company makes electronic products (pcb boards) and I work with software in C++ that talks to the electronics on the baords. Additionally we also have a suite of applications that use Component object model for everything. The GUI's are using MFC and COM is used to talk across Dlls for everything. My question is COM seems like very old technology and they are stuck there because everything uses COM for the last 30 years. Is this a good place to work in and learn? They probably will not change in a while. Do a lot of companies use COM and ActiveX like this or is this because they did not upgrade their control and stuck with the old technology? They only recently started using C++ 11. If they wanted to make a change what could they do?

Что я уже пробовал:

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

4 Ответов

Рейтинг:
2

Rick York

Насколько мне известно, нет, они этого не делают. COM и ActiveX, похоже, редко используются в наши дни. МФЦ также редко используется.

Можно использовать библиотеки DLL с MFC и без COM или ActiveX. Я делал это много раз.


F-ES Sitecore

> COM и ActiveX, похоже, редко используются в наши дни.

Офис использует com в Visual Studio использует com, В большинстве не-dotnet ограничителя приложений, которые вы установили на вашу машину возможно использовать COM, и даже некоторые из .сеть будут использовать его слишком, плагины для приложения, чтобы использовать браузеры ком.

Stefan_Lang

Office использует OLE 2, а не COM. Признаюсь, я только сейчас узнал, что OLE 2 сам использует COM. Но сказать, что Office использует COM, все еще вводит в заблуждение.

Кроме того, ActiveX, для всех интернет-поисков, которые могут появиться, не построен на COM. Он только адаптирует свой API. Плагины в Internet Explorer используют ActiveX, а не COM. Плагины, в других использовать другой браузер API-интерфейсов, электронная. г. CORBA или XPCOM, или что-то поновее.

VisualStudio - я не нашел никаких ссылок на VisualStudio с использованием COM, OLE (2) или ActiveX. Вероятно, он использует по крайней мере один из них в качестве API для плагинов, но поскольку MS выгнала их в Edge, мне интересно, не сделали ли они то же самое для VS? Я не знаю. У вас есть ссылка на VS 19?

Что касается других приложений, то почему большинство из них должно использовать старый, плохо документированный API с закрытым исходным кодом, когда они могут вместо этого использовать альтернативы с открытым исходным кодом? Или, если им нужна COM-совместимость, почему бы не использовать более новые API OLE 2 или XPCOM?

Я не думаю, что ваши утверждения точны. Если вы считаете иначе, пожалуйста, предоставьте ссылки.

F-ES Sitecore

> Office использует OLE 2, а не COM

Set oWord = CreateObject("Word.Приложение") // Слово.Приложение-это COM-объект
oWord.Видимое = Истинное
Установите oDoc = oWord.Документы.Добавить

Установите oPara1 = oDoc.Content.Пункты.Добавить
опара1.дальность действия.Текст = "О'Кей, Бумер"
опара1.дальность действия.InsertParagraphAfter

> Если вы думаете иначе, пожалуйста, предоставьте ссылки.

Нет нужды. Оно делает. Приведенный выше код использует COM. Вы говорите о форматах документов, я говорю о манипуляциях с кодом.

Stefan_Lang

ОП и я говорили о с++. Вот статья, описывающая, как автоматизировать документы word на языке C++:
https://www.codeproject.com/Articles/1145676/Automating-Word-using-Visual-Cplusplus-MFC-in-Visu

Хотя в статье это не указано (не то, чтобы я видел); Похоже, что он использует OLE (класс COLEVariant может дать вам подсказку).

Да, некоторые вызовы функций являются *реализациями* COM API, но тем не менее это OLE.

F-ES Sitecore

"Вот статья, которая на самом деле не говорит, что я прав, но она говорит, что я прав".

Хорошо.

Stefan_Lang

Код в этой статье использует по крайней мере некоторые классы OLE. Он явно не говорит, что весь используемый API является частью OLE. Но разумно предположить, что это так.

Если вы не заметили, что используется класс, который на самом деле из COM, а не из OLE, то я исправляюсь. А до тех пор, пожалуйста, прекратите публиковать необоснованные заявления.

F-ES Sitecore

Set oWord = CreateObject("Word.Приложение") // Слово.Приложение-это COM-объект

Stefan_Lang

Я уже видел это в первый раз, когда вы опубликовали этот код. Но это не C++. ОП специально сказал, что он использует C++, однако, и спросил о жизнеспособности использования COM в C++.

Я говорю, что, насколько мне известно, ближе всего к COM _в__C++_ подходит OLE API. Вместо этого вы можете использовать COM API, но я не знаю, кто на самом деле это делает.

Ссылка, которую я предоставил, была примером, показывающим, как выполнять связанные с COM задачи в C++ с использованием OLE вместо COM.

F-ES Sitecore

Вы сказали, что офис не использует COM. Слово.Приложение-это COM-объект. Я изо всех сил пытаюсь понять, как я могу сделать это еще более ясным? Просто чтобы убедиться, что я не отстал от времени, я просто запустил oleviewer, расширенное слово.Применение и, да, есть, я знаю

Stefan_Lang

Да, извини. Мне не следовало быть таким общим в своих заявлениях. То, что я имею в виду, - это API C++. Вызываются ли офисные документы через COM, OLE или что-то еще с другого языка, ОП не имеет значения. Он спросил о COM только в контексте C++.

Рейтинг:
2

KarstenK

Использование этих старых технологий исчезает. Для молодого программиста это более рискованный путь. Я работал несколько лет с этим сложным материалом, а теперь занимаюсь мобильным программированием и поэтому могу сказать по своему опыту, что это weired материал, который тесно связан с инструментами windows и Microsoft. И MS иногда останавливает разработку некоторых инструментов.

Я бы оценил, что эти темы больше подходят для опытного программиста (50+) в конце его карьеры, который хочет извлечь выгоду из своего опыта за последние 20 лет. Как я ;-)


Рейтинг:
2

Stefan_Lang

Обновление 2: После некоторых разногласий (см. комментарии) Я наконец-то нашел хороший сайт, чтобы почитать на COM: Объектная модель компонента - Win32-приложений, Майкрософт документы[^].

Хотя это прямо не противоречит ничему из того, что я сказал, Кажется, что под капотом COM все еще очень жив в Windows. Однако вы должны знать, что большинство приложений используют COM только косвенно, через библиотеки DLL и фреймворки, такие как OLE (2).

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



Цитата:
Это старая технология?

Нет, он древний. Самая старая технология такого типа, которую я использовал сам, была OLE 2, еще в 90 - х годах. Даже тогда COM был устаревшим!
Цитата:
Это хорошее место, чтобы работать и учиться?

Конечно, если вы интересуетесь археологией ...

На более серьезной ноте, нет, определенно нет. Если вы выросли вместе с этими техниками, то можете остаться. Но учить их только для того, чтобы иметь возможность делать эту работу? Никогда!
Цитата:
Они, вероятно, не изменятся в ближайшее время.

Если они не изменятся, то скоро умрут от старости вместе с последними программистами, которые хоть что-то знают о COM.
Цитата:
Если бы они захотели что-то изменить, что бы они могли сделать?

1. потратьте немного усилий и найдите хороших программистов, которые свободно владеют современными программными технологиями для C++ и родственных языков и готовы работать над рефакторингом динозавров в гепардов.

2. Не стремитесь к C++11, стремитесь к C++17 и постоянно двигайтесь к новейшему стандарту. Стремление к уже устаревшему стандарту - это то, что ваша компания сделала 30 лет назад- не повторяйте эту ошибку!

3. Возможно, стоит сначала потратить некоторое время на изучение существующих современных фреймворков, которые могли бы помочь заменить старую функциональность. Я не эксперт в этой области, но у меня есть ощущение, что веб-технологии могут обеспечить все, что вам нужно. Превращение ваших программ в приложения, которые работают на веб-серверах и используются через тонкие клиенты, может преобразить весь ваш бизнес. Конечно, это означает, что вам понадобятся веб-разработчики, возможно, не один. Ну, никто не говорил, что это будет дешево ;-)

4. после того, как вы решили, куда идти, вам нужно решить, как туда добраться.

Если важно, чтобы текущие пользователи были довольны, вам, возможно, придется идти медленно, и вам может понадобиться поддерживать как новые, так и старые технологии одновременно. Поскольку вы говорите, что у вас много программ, вероятно, лучше всего рефакторировать их по одной или по две за раз.

Альтернативой было бы создать графический интерфейс и коммуникационную платформу для всех ваших программ, упаковать старые основные функциональные возможности в DLL и вызвать эти функции из новых разработанных программ, основанных на этой платформе. Это развитие должно было бы происходить при сохранении существующего набора программ. Если у вас нет возможности для этого, вам нужно нанять больше людей. Конечно, вы также можете попробовать использовать консультантов, но ИМХО это не будет хорошей идеей: вам нужны новые знания, чтобы остаться в компании.

Цитата:
Многие ли компании используют COM и ActiveX

Я удивлен, услышав, что есть еще компании, использующие COM - я бы ожидал, что они уйдут или умрут по крайней мере 10 лет назад. Что касается MFC, то он все еще существует, главным образом потому, что он все еще был вездесущ во всех версиях Windows вплоть до Windows 8.1. ActiveX находится между ними. Будучи более новым, чем МФЦ, он уже давно считался угрозой безопасности и избегался большинством компаний по крайней мере 10-15 лет. Кроме того, он в основном использовался в играх, а игровая индустрия быстро переходит на новые технологии.


F-ES Sitecore

COM не существовал, когда разрабатывался OLE, COM вырос из этой концепции.

> Я удивлен, услышав, что есть еще компании, использующие COM

Все продукты Microsoft, установленные на вашем компьютере прямо сейчас, используют COM.

Если вы предполагаете, что OP не использует COM, то что же вы предлагаете ему использовать для взаимодействия между DLL вместо этого? Какая технология inter-DLL заменила COM, технология, которую вы с удивлением слышите, все еще используется?

MadMyche

Именно так. OLE вышел в 90-м, COM-в 93-м, а затем ActiveX-в 96-м.

Stefan_Lang

Я имел в виду OLE 2, который пришел после COM, и некоторые (многие?) считали его заменой. Я не смог найти заявление о дате выпуска, но это, должно быть, было около 1995 года.

Что касается возраста кома, то моя память не очень хорошо мне служила. Пожалуйста, смотрите мой другой комментарий.

Stefan_Lang

"COM не существовало, когда разрабатывался OLE"
И COM, и OLE 2 были основаны на OLE 1. Вы правы, моя информация была немного вводящей в заблуждение в этом отношении.

Я работал над OLE 2 в то время, когда COM уже существовал, и, насколько я знал, OLE 2 считался более современным стандартом. Однако мнения по поводу DCOM, который в то время все еще находился в стадии разработки, разделились.

Однако я не очень следил за этим развитием, так как перешел к клиент-серверным приложениям, использующим серверы баз данных и локальные клиенты.

"Все продукты Microsoft, установленные на вашем компьютере прямо сейчас, используют COM"

Так ли это? Я думал, что MS выгнала все старые вещи с Windows 10. Но я должен признаться, что никогда по-настоящему не исследовал это. Коммуникационные протоколы - это не моя область знаний.

Обновление: я посмотрел его и обнаружил, что, действительно, COM все еще кажется живым и здоровым. Однако он в основном скрыт в новых библиотеках DLL или под менее заметными API, что объясняет, почему я не знал об этом.

- Если вы предполагаете, что ОП не использует COM, то что же вы предлагаете ему использовать для связи между DLL вместо этого?

Учитывая эту новую информацию о состоянии ком, я должен признать, что не могу ответить на этот вопрос.

Спасибо, что указали на мою ошибку. Я действительно кое-чему научился из этого. Кроме того я не единственный кто стареет ;-)

Dave Kreskowiak

COM все еще очень жив и все еще широко используется во всех окнах. По соображениям обратной совместимости, это не скоро исчезнет. Вероятно, пройдет еще по меньшей мере 20 лет медленного упадка, прежде чем он "умрет на корню".

Stefan_Lang

Нет, категорически нет!

Единственное "приложение", которое все еще используется и все еще использует COM, - это OLE 2, который, в свою очередь, используется в MS Office. Однако утверждение, что Office использует COM, все еще вводит в заблуждение.

Ни один современный браузер не использует COM или ActiveX. Я не знаю, что использует Edge, но это не ActiveX, и это тоже не COM.

Единственное приложение для COM-подобных фреймворков-это плагины, и есть более новые альтернативы с лучшей документацией, и многие из них являются открытыми исходными кодами. Только древние программного обеспечения как офисного по-прежнему держаться за старые рамки. Но после того, как MS бросила ActiveX в Edge, это только вопрос времени, когда они заменят OLE 2 и в Office.

[редактировать]
P.S.: извините, я вставил ответы на то, что на самом деле не было вашим статусом.

Кроме того, я наконец-то нашел текущую документацию по COM, и, похоже, вы не ошибаетесь. Но я все еще думаю, что по большей части COM используется только косвенно, через библиотеки DLL и API, построенные на нем.

Dave Kreskowiak

Там все еще есть много вещей, которые разоблачают вещи через COM. Все, что вам нужно сделать, это добавить ссылку в Visual Studio и перейти на вкладку COM, чтобы увидеть это.

COM выходит далеко за рамки браузера.

Stefan_Lang

Я не говорю, что вы ошибаетесь, но я честно не знаю, что вы имеете в виду. Что вы подразумеваете под "ссылкой" и в какую часть Visual Studio я должен ее "добавить"? Помните, что эта тема посвящена C++. Если вы говорите о чем-то еще, кроме C++, пожалуйста, упомяните об этом.

П. С.: Я думаю, что это вышло немного неловко. Я просто не понимаю, что вы подразумеваете под своим заявлением. Пожалуйста, забудьте мое упоминание о C++, это не имеет значения.

Dave Kreskowiak

Извините, любой проект приложения C# Windows.

Stefan_Lang

Ах, спасибо, это объясняет мое замешательство. Это может показаться странным, но, несмотря на десятилетия опыта работы в C++, я только задел C#. Почему-то мне это никогда не было нужно.

Вы имеете в виду отражение? Насколько я понимаю, это то, что, по крайней мере, построено на идее реализации какого-то известного интерфейса. Понятия не имею, действительно ли он использует COM.

Dave Kreskowiak

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

Stefan_Lang

Спасибо за разъяснение.

Randor

COM активно используется в Windows 10 и не исчезнет в ближайшее время. Некоторые из новых системных служб в Windows 10 решили пойти с COM/DCOM. Некоторые из основных фреймворков, таких как WinRT, на самом деле основаны на COM. Вы понятия не имеете, сколько COM используется внутри компании...

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

Рейтинг:
1

MadMyche

Хотя он стар, его все еще очень часто можно найти в производственных условиях.

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

Через пару часов другой производитель просто должен был воскресить свои старые проекты COM и COM+, поскольку карманные устройства, которые они используют, теперь основаны на Android, а не на Win CE, поэтому они потеряли NET Framework и не имели времени для перезаписи

Так что, хотя это и не самое современное, это одна из тех вещей, которые просто работают; и я думаю, что это будет вокруг в течение длительного времени.