从Excel发送命令到应用程序? COM?

时间:2008-12-29 04:35:26

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

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

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

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

但我之后需要的是通过我的应用程序从Excel控制我的app / proxying命令到设备的方法。

最好的方法是什么?

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

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

由于

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

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

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

2 个答案:

答案 0 :(得分: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服务器。

答案 1 :(得分:1)

从VBA调用COM对象非常简单。这个SO Question and my answer给出了如何创建COM对象的示例。调用暴露的方法正如您所期望的那样:

object.ExposedMethod(optional params...);