如何从另一个进程中寻址由给定IUnknown*标识的COM对象?

How can I address a COM object identified by a given IUnknown* from another process?

本文关键字:标识 IUnknown COM 对象 另一个 进程 寻址      更新时间:2023-10-16

我写了两个小的c++应用程序,其中一个是一个嵌入一些ActiveX控件的ActiveX容器。这个容器应用程序知道引用ActiveX控件的IUnknown*

另一个应用程序是一个客户端,它将与前一个应用程序中的ActiveX控件交互。但是,我不知道如何在客户端应用程序中获得控件的句柄。由于独立的地址空间,简单地将IUnknown*的指针值从服务器传输到客户端当然是行不通的。

是否有可能"复制"一个句柄到一些COM对象,以便新创建的句柄可以被其他进程使用?我想让COM为我做RPC工作。否则,我需要在服务器应用程序中执行所有COM调用,并自己执行所有RPC。: -/

您可能想要查看一般的RPC和COM代理。

代理驻留在调用进程的地址空间中,充当远程对象的代理。从调用对象的角度来看,代理就是对象。通常,代理的角色是打包接口参数,以便在其对象接口中调用方法。代理将参数打包到消息缓冲区中,并将缓冲区传递到通道,通道处理进程之间的传输。代理被实现为聚合或组合对象。它包含一个系统提供的管理器,称为代理管理器,以及一个或多个特定于接口的组件,称为接口代理。接口代理的数量等于已公开给该特定客户端的对象接口的数量。对于遵循组件对象模型的客户端,代理似乎是真正的对象。