1

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

我为 RTD 部分找到了这些资源:http: //support.microsoft.com/ ?id=327215 和 http://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 安装大小......

4

2 回答 2

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 服务器。

于 2008-12-29T04:52:55.513 回答
1

从 VBA 调用 COM 对象很简单。这个SO Question 和 my answer提供了一个如何创建 COM 对象的示例。调用暴露的方法正如你所期望的那样:

object.ExposedMethod(optional params...);
于 2008-12-29T04:53:21.610 回答