【问题标题】:Accessing an application's COM interface using C++ or C使用 C++ 或 C 访问应用程序的 COM 接口
【发布时间】:2009-01-04 00:50:31
【问题描述】:

在回答问题时,我如何(或找到更多信息)自动化某些功能无需用户干预,从 C++(或 C)使用:

  • ATL
  • 或直接用 C/C++ 编写自动化代码

问候

【问题讨论】:

    标签: c++ c com interface


    【解决方案1】:

    如果应用程序公开了一个类型库(Microsoft Office 应用程序也公开了),那么您可以通过使用#import 关键字从 Microsoft C++ 获取它。这将为应用程序公开的 COM 接口创建 C++ 包装器。

    类型库通常是 .TLB 文件,但它们通常作为 Win32 资源嵌入在可执行文件中。

    要确定应用程序是否以这种方式公开其功能,您可能需要查阅特定应用程序的文档,因为发现(和理解)类型库非常复杂。

    Windows SDK 包含一个工具“OLE/COM 查看器”,它可以显示注册表中 COM 对象或来自 .TLB 文件或资源的类型库信息。

    如果您想使用应用程序,VBScript(或 JScript)为您提供了一种快速试验的方法。它们都能够使用 OLE 自动化接口。

    【讨论】:

    • 完美!非常感谢 Roger :) 我试图利用的应用程序称为 Simul8 - 从我正在编写的 C++/C 应用程序访问 COM - 问候 :)
    【解决方案2】:

    自动化是指能够拥有一个运行应用程序、与之通信并执行某些功能的脚本。类似于自动化测试脚本之类的东西。

    为此,最简单的方法(如果应用程序已经存在,例如 Word、Excel、Visual Studio 等)是用支持 DCOM 的语言(例如 Ruby 及其 WIN32OLE 库)编写脚本并使用它来调用应用程序。

    如果您正在开发一个应用程序,那么这会变得更加棘手,您可以将现有的脚本语言嵌入到您的可执行文件中,并提供一种与之交互的方法。也许有一个命令行选项可以在应用程序的上下文中自动运行脚本。或者如果你想做一些严肃的开发工作,你可以尝试在 DCOM 中添加(我没有尝试过,所以我不知道涉及多少工作)。

    【讨论】:

    • 首先,感谢您的回复。我相信我的意思是(请原谅我缺乏理解 - 目前在 COM 访问上)现有应用程序可用的访问功能。基本上,从 C/C++ 应用程序调用 COM 功能。问候
    • 那么您想知道如何在当前应用程序中使用 C++ 调用 COM 对象(在其他应用程序中)的函数吗?
    • 您好 Daemin,感谢您的回复 - 我很感激。其实,是。我是一名缺乏 Windows 编程经验的中级 Linux C 程序员(不介意使用 C++,而是使用 C)。但是,我可以做到 - 只需要一些指导 - 问候 :)
    • 好的,我会更改答案或添加一个新答案,但是您选择的答案非常好。祝你好运!
    • 嗨 Daemin,我找到了一篇 [support.microsoft.com/kb/181473] 文章 - 从 C 应用程序而不是 C++ 中使用 OLE 自动化。这是否适用或您会推荐的东西/方法?问候:)
    猜你喜欢
    • 2010-09-29
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2023-03-13
    相关资源
    最近更新 更多