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

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

我发现这些RTD部分的资源: http : //support.microsoft.com/? id= 327215和http://support.microsoft.com/?id=327215

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

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

什么是最好的方法来做到这一点?

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

请记住,这是一个非托pipe的C ++应用程序,它现在不能转换为托pipe或C#。 也欢迎使用C#的替代scheme,但这是一个长期的重写。

谢谢

编辑我有一个替代COM添加到现有的EXE支持。 我认为添加一个双向通信更为灵活(跨平台 – 也许提升或corba或直接IP基于我自己的消息协议)

一个COM服务器(或两个)可以包装该通信通道 – 不pipe它是什么。 这并不真正影响我的问题 – 我仍然想知道从Excel中控制外部EXE的选项。

编辑不必为客户推出.NET也是一大利好。 许多这些设备是在电脑上是相当古老,可能有NT或XP,我不津津乐道的增加我的设置/安装包从700KB到荒谬的.NET安装大小…

选项1:

创build一个小的COM服务器 – 确保它的接口适合用Excel中的内置Visual Basic引擎编写脚本。 (如使用简单的types和BSTRS)。

写Excel的VBmacros(1)添加你自己的工具栏到Excel和(2)调用你的COM服务器。

您也可以添加button和其他用户界面元素到工作表,并挂钩到VBmacros。

选项#2:

我意识到,你不想使用C# – 但是自动化办公室,并与Visual Studio Tools for Office(VSTO)的C#聊天COM对象真的很容易。 你真的看着这个选项 – 如果正确的话,它不应该重写任何你现有的代码。 只需使用C#和VSTO作为Excel和RTD服务器之间的桥梁。 与VB一样,它将Excel中的UI元素连接到C#,然后连接到RTD服务器。

从VBA调用COM对象很简单。 这个问题和我的答案给出了一个如何创build一个COM对象的例子。 调用暴露的方法是你所期望的:

object.ExposedMethod(optional params...);