【问题标题】:Exporting a subset of a out-of-proc COM server by using an in-proc-server使用进程内服务器导出进程外 COM 服务器的子集
【发布时间】:2011-05-17 13:22:33
【问题描述】:

我实现了一个进程外 COM 服务器(在服务中实现)。我不希望其他应用程序访问 COM 服务器中的所有功能,因此我开发了一个进程内服务器 (DLL),它可以与进程外服务器通信。

因为我不希望直接访问进程外 COM 服务器中的接口,所以我没有将类型库嵌入到服务中,所以我认为我可以使用 #import 并访问 COM服务器通过 TLB。但是,当我尝试在我的进程内服务器中创建一个在服务中实现的类的实例时,我得到了一个 E_NOINTERFACE。我猜这是由于编组,但我不知道如何克服这个问题。

知道如何在不暴露进程外服务器的接口细节的情况下从进程内服务器与我的进程外服务器进行通信吗?

【问题讨论】:

  • 除了我可能的错误答案之外,我还问了以下问题stackoverflow.com/questions/4311997/…
  • 我使用了代理/存根方法。我阅读了您的问题,这也是我感兴趣的问题:代理/存根是否公开接口?我看到您回答了自己的问题,但答案尚不清楚。

标签: com marshalling


【解决方案1】:

我不确定这将如何帮助隐藏接口,但there're three ways to make marshalling working 和 typelib 就是其中之一。另一种相当简单的方法是代理/存根——在一个单独的进程内 COM 服务器中的一堆代码,一旦在 Windows 注册表中注册,它将自动进行编组。同样,我不确定这将如何帮助隐藏接口,但它看起来比一个类型库更隐蔽,只是将接口暴露给任何使用 OLEView 的人。

【讨论】:

  • 提前绑定是什么意思?我怎样才能做到这一点?我使用 ATL 简单对象向导来创建新的 COM 对象。
  • @Mark Zimmers:您声明了一个继承自 IUnknown(不是 IDispatch)的 COM 接口,并且不将类型库嵌入到资源中。现在客户端程序使用 Visual C++ #import 指令来研究接口并生成接口的 C++ 等效项。完成 - 因为任何地方都没有类型库(除了构建过程),没有彻底的逆向工程,没有人可以找到那里的接口。
  • @Mark Zimmers:一旦你有任何具体问题,你应该在这里提问。
猜你喜欢
  • 2014-02-18
  • 2013-01-20
  • 2012-09-06
  • 2010-11-18
  • 2015-05-23
  • 2012-10-10
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多