2008-12-29 67 views
1

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

我发现这些资源的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#的替代方案也受到欢迎,但这是一个长期的重写。

由于

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

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

编辑 不必.NET推出给客户也是一个大利好。许多这些设备都在PC上,很旧,可能有NT或XP,我不赞同将我的安装/安装包从700KB增加到荒谬的.NET安装大小...

回答

1

选项# 1:

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

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

您还可以添加按钮和其他UI元素表和他们挂钩起来,以VB宏。

选项#2:

我知道你不希望使用C# - 但自动化办公,再跟COM对象是真的,在C#和Visual Studio Tools for Office中很容易(VSTO) 。你真的看着这个选项 - 如果做得对,它不应该重写你现有的任何代码。只需使用C#和VSTO作为Excel和RTD服务器之间的桥梁。与VB一样,它直接将Excel中的UI元素连接到C#,然后连接到RTD服务器。

+0

我认为你是对的C#方面。这会让事情变得更简单。我可以从我现有的应用程序中提供一些基本的进程间通信,然后用C#构建Excel /自动化作品。 – Tim 2008-12-29 04:55:55

1

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

object.ExposedMethod(optional params...); 
相关问题