【问题标题】:sending commands to an application from Excel? COM?从 Excel 向应用程序发送命令?通讯?
【发布时间】:2023-04-09 09:25:01
【问题描述】:

我编写了一个设备控制器 (rs232),它正在成功使用,但是用户希望从 Excel 中查看数据和控制设备(或者可能通过我的程序进行通信)。我放弃了 DDE 作为一个选项,并发现 RTD (IRtdServer) 可能是一个好的开始(尽管无法从实时数据客户端将数据发送回“服务器”)。

我为 RTD 部分找到了以下资源: http://support.microsoft.com/?id=327215http://support.microsoft.com/?id=327215

这是一个多线程应用程序,我已经添加了在 com 端口上拥有多个侦听器的功能,以便我可以更新多个客户端。我将COM接口添加到EXE中。

但在那之后我需要通过 Excel 中的应用程序控制我的应用程序/代理命令到设备的某种方式。

最好的方法是什么?

也许是另一个 COM 接口并从 VBA 或其他什么地方调用它?我不熟悉在 Excel 中使用脚本,所以也许有人可以提供示例代码或链接来显示 COM 对象的代码和随附的 VB(A?) 代码?

请记住,这是一个非托管 C++ 应用程序,目前无法转换为托管或 C#。也欢迎使用 C# 的替代方案,但这是长期重写。

谢谢

编辑 我有另一种方法可以将 COM 支持添加到现有的 EXE 中。我认为添加双向通信更灵活(跨平台 - 可能是 boost 或 corba,或者只是基于我自己的消息协议的直接 IP)

一个(或两个)COM 服务器可以封装该通信通道——不管它是什么。这根本不会影响我的问题 - 我仍然想知道从 Excel 控制外部 EXE 的选项。

编辑 不必向客户推出 .NET 也是一大优势。这些设备中的许多都在相当旧的 PC 上,并且可能带有 NT 或 XP,我不喜欢将我的安装/安装包从 700KB 增加到荒谬的 .NET 安装大小......

【问题讨论】:

    标签: c++ excel com real-time-data


    【解决方案1】:

    选项 #1:

    创建一个小型 COM 服务器 - 确保其接口适合使用 Excel 中内置的 Visual Basic 引擎编写脚本。 (例如,使用简单类型和 BSTRS)。

    编写 Excel VB 宏以 (1) 将您自己的工具栏添加到 excel 和 (2) 调用您的 COM 服务器。

    您还可以将按钮和其他 UI 元素添加到工作表并将它们连接到 VB 宏。

    选项 #2:

    我知道您不想使用 C# - 但是使用 Visual Studio Tools for Office (VSTO) 在 C# 中实现办公自动化以及与 COM 对象的对话非常非常简单。你真的应该考虑这个选项 - 如果做得正确,它不应该意味着重写你现有的任何代码。只需使用 C# 和 VSTO 作为 Excel 和 RTD 服务器之间的桥梁。与 VB 一样,直接将 Excel 中的 UI 元素连接到 C#,然后连接到您的 RTD 服务器。

    【讨论】:

    • 我认为您对 C# 方面的看法是正确的。这会让事情变得简单得多。我可以从我现有的应用程序中提供一些基本的进程间过程,然后使用 C# 构建 Excel/自动化部分。
    【解决方案2】:

    从 VBA 调用 COM 对象非常简单。这个SO Question and my answer 给出了一个如何创建COM 对象的例子。调用暴露的方法正如你所料:

    object.ExposedMethod(optional params...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 2012-08-14
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多