首页 > 解决方案 > 如何处理 Delphi 中两个不同公寓之间的 COM 回调

问题描述

我有一个自由线程的进程内 COM 服务器;称之为#1。我需要从进程外 COM 服务器 #2(运行 STA 公寓)调用此方法。我认为最好的方法是从 #1 启动 #2 并使用 COM 回调,以便从 #3 对 #2 的调用传递到 #1。

我已经用进程外程序做了同样的事情。程序 1 通过 COM 启动程序 2 并设置 COM 回调。程序 3 通过 COM 连接到程序 2 并调用一个调用 #1 的方法。

但是 COM 回调不适用于进程内 COM 服务器,我怀疑我必须实现一些编组,但我发现它非常具有挑战性。我一直在阅读 Don Box 的 COM 书以及 techvanguards 网站。

其背景是 Microsoft Dynamic Virtual Channels。进程内COM服务器是在MSTSC下进程内运行的客户端dll端。我是否错过了一些从进程外应用程序调用它的明显方法,或者我是否以正确的方式启动进程外 COM 服务器?

我怀疑我正在寻找与此问题和答案等效的 Delphi。

标签: delphicom

解决方案


如果您通过接口方法传递接口指针,COM 应该为您进行编组。因此,如果您可以控制所涉及的所有接口,则解决方案可以像添加方法一样简单SetCallback(IWhatever *callback),而将所有繁重的工作留给 COM。

GIT(全局接口表)在这里并没有真正的帮助,因为它只能在进程中工作;机器范围的等效项是 ROT(运行对象表)。但是,这里不需要使用 GIT 或 ROT 放屁,因为您已经拥有可以传递指针的实时 COM 连接。


推荐阅读