我继承了一个应用程序,该应用程序由一堆使用COM和COleDispatchDriver进行通信的exe文件组成。有一个主要的“客户端”exe,以及几个提供服务的“服务器”可执行文件。
目前,客户端进程使用COleDispatchDriver :: CreateDispatch()启动服务器,并将解析后的应用程序ID传递给类ID。这样做的问题在于它依赖于正在注册的COM服务器(潜在的故障点)。如果计算机上有多个不同版本的COM服务器,也可能会出现问题。
我想让它不那么脆弱,而不必在此时完全重新构建应用程序。有没有办法保持相同的通信机制,但显式启动特定的服务器应用程序?客户端知道服务器应用程序的位置以及它们的名称(它们位于同一目录中的客户端旁边)。
答案 0 :(得分:1)
这有点棘手,但您可以手动编组自己需要的接口。让客户端触发创建客户端对象的服务器,并使用CoMarshallInterface()
将其接口编组回客户端。
一旦客户端编组了接口,您就可以通过调用QueryInterface来获取IDispatch接口。