0

我继承了一个应用程序,它由一堆使用 COM 和 COleDispatchDriver 进行通信的 exe 文件组成。有一个主要的“客户端”exe 和几个提供服务的“服务器”可执行文件。

目前,客户端进程使用 COleDispatchDriver::CreateDispatch() 启动服务器,传递一个应用程序 ID,该应用程序 ID 被解析为一个类 ID。这样做的问题是它依赖于正在注册的 COM 服务器(一个潜在的故障点)。如果机器上有多个不同版本的 COM 服务器 exe,也可能会出现问题。

我想让它变得不那么脆弱,而不必在此时完全重新架构应用程序。有没有办法保持相同的通信机制,但显式启动特定的服务器应用程序?客户端知道服务器应用程序在哪里以及它们被称为什么(它们与客户端在同一目录中)。

4

1 回答 1

1

这有点棘手,但您可以自己手动编组您需要的接口。让客户端启动服务器,该服务器创建客户端对象并使用CoMarshallInterface().

一旦客户端编组了接口,您应该能够通过简单地调用 QueryInterface 来获取 IDispatch 接口。

于 2012-08-08T20:46:54.720 回答