delphi - 如何处理 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。
解决方案
如果您通过接口方法传递接口指针,COM 应该为您进行编组。因此,如果您可以控制所涉及的所有接口,则解决方案可以像添加方法一样简单SetCallback(IWhatever *callback)
,而将所有繁重的工作留给 COM。
GIT(全局接口表)在这里并没有真正的帮助,因为它只能在进程中工作;机器范围的等效项是 ROT(运行对象表)。但是,这里不需要使用 GIT 或 ROT 放屁,因为您已经拥有可以传递指针的实时 COM 连接。
推荐阅读
- java - ConflictingBeanDefinitionException:与同名和类的现有不兼容 bean 定义冲突
- keycloak - 与 Infinispan 远程异常通信会产生过多的网络流量
- sql - 我将如何调整存储过程中执行的每个事务的大小?
- python - 如何在 Python 计算器中显示一个没有科学计数法的数字?
- python - Python 矩阵乘法与 BLAS
- javascript - 角度上传并返回主页
- javascript - 我们是否应该在为 javascript 编写单元测试时创建一个类似于实际文件的测试 html 文件?
- java - Android - 我无法通过尝试打开文件,但无法从文件资源管理器中打开
- swift - 为什么对象只有从 NSObject 继承时才会变成 NSZombie?
- android - 如何使用 Room 和 LiveData Android 填充多个对象数据库