Доступ к COM-интерфейсу приложения с помощью C++ или C

В ответ на вопрос, как я могу (или найти дополнительную информацию) автоматизировать определенные функциональные возможности без вмешательства пользователя из C++ (или C), используя:

  • АТЛ
  • Или код автоматизации непосредственно в C/C++

С уважением


person Aaron    schedule 04.01.2009    source источник


Ответы (2)


Если приложение предоставляет библиотеку типов (как и приложения Microsoft Office), вы можете получить ее из Microsoft C++, используя ключевое слово #import. Это создаст оболочки C++ для COM-интерфейсов, предоставляемых приложением.

Библиотеки типов часто представляют собой файлы .TLB, но они регулярно встраиваются как ресурсы Win32 в исполняемые файлы.

Чтобы выяснить, раскрывает ли приложение свою функциональность таким образом, вам, вероятно, потребуется обратиться к документации по конкретному приложению, потому что обнаружение (и понимание) библиотек типов довольно сложно.

Windows SDK включает инструмент «OLE/COM Viewer», который может отображать информацию о библиотеке типов для COM-объекта в реестре или из файла или ресурса .TLB.

Если вы хотите поиграть с приложением, VBScript (или JScript) даст вам быстрый способ поэкспериментировать. Оба они могут использовать интерфейсы OLE Automation.

person Roger Lipscombe    schedule 04.01.2009
comment
Идеально! Большое спасибо, Роджер :) Приложение, которое я пытаюсь использовать, называется Simul8 - доступ к COM из приложения C++/C, которое я пишу - привет :) - person Aaron; 05.01.2009

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

Для этого самый простой способ (если приложение уже существует, например Word, Excel, Visual Studio и т. д.) — написать сценарий на языке, поддерживающем DCOM (например, Ruby с его библиотекой WIN32OLE), и использовать его для вызова в заявление.

Если вы разрабатываете приложение, то это становится сложнее, вы, вероятно, могли бы встроить существующий язык сценариев в свой исполняемый файл и предоставить способ взаимодействия с ним. Возможно, у вас есть опция командной строки для автоматического запуска скрипта в контексте вашего приложения. Или, если вы хотите выполнить серьезную работу по разработке, вы можете попробовать добавить в DCOM (я не пробовал это, поэтому я не знаю, сколько работы требуется).

person Daemin    schedule 04.01.2009
comment
Во-первых, спасибо за ваш ответ. Я полагаю, что имел в виду (извините за непонимание - в настоящее время доступ к COM), доступ к функциям, доступным существующим приложением. По сути, из приложения C/C++ вызовите функциональность COM. С уважением - person Aaron; 04.01.2009
comment
Итак, вы хотите знать, как вызывать функции для COM-объектов (в других приложениях) с помощью C++ в вашем текущем приложении? - person Daemin; 04.01.2009
comment
Привет, Демин, спасибо за ответ - я благодарен. На самом деле да. Я средний программист Linux C (не против использования C ++, а скорее C), которому не хватает опыта программирования для Windows. Тем не менее, я могу это сделать - просто нужно некоторое руководство - с уважением :) - person Aaron; 05.01.2009
comment
Хорошо, я бы изменил свой ответ или добавил новый, но выбранный вами ответ очень хорош. Удачи! - person Daemin; 05.01.2009
comment
Привет, Демин! Я нашел статью [support.microsoft.com/kb/181473] — Используйте OLE-автоматизацию из приложения C, а не C++. Будет ли это применимо или что-то / метод, который вы бы порекомендовали? С уважением :) - person Aaron; 06.01.2009
comment
Да, это выглядит разумно, вы все еще программируете на C++, но в стиле C, используя структуру указателей на функции и явно передавая указатель this. Если вы действительно хотите просто использовать C, тогда продолжайте, но я бы посоветовал попробовать C++ для этой цели. - person Daemin; 06.01.2009