【问题标题】:How to include a COM Interface that is defined in another type library (or COM server DLL)如何包含在另一个类型库(或 COM 服务器 DLL)中定义的 COM 接口
【发布时间】:2017-11-17 01:03:53
【问题描述】:

全部

我的环境: 使用 VS C++ 2005,带 ATL

我有一个项目,我想在其中创建和构建 2 个单独的 COM 服务器 Dll,我需要在项目 B 中引用项目 A 中定义的 COM 对象的接口。 注意:我需要能够在 IDL 级别做到这一点,然后编译器将生成正确的头文件等,我的类型库将是正确的。

这是一个例子:

项目A:

服务器对象 -> IServer

项目 B

Client Object -> IClient,它有一个 GetServer() 方法,返回 Project A 中定义的 IServer

项目 A 是单独的 COM Dll,首先构建。 项目 B 是单独的 COM Dll 并引用项目 A 中定义的接口。

是的,我知道,我可以让 IClient.GetServer() 以 IUnknown 形式返回对服务器对象的引用,然后让开发人员将其显式转换为服务器接口,但这很烦人且容易出错。

【问题讨论】:

  • 你的问题是什么?
  • 项目 B 的 TypeLibrary 需要对项目 A 的 TypeLibrary 有一个引用(importlib 指令),然后才能使用项目 A 中声明的接口。
  • 问题在主题中并在第一段中讨论。好的,我想我只需要 importlib,在我为项目 A 注册类型库之后......我会试一试。

标签: c++ com atl


【解决方案1】:

按照建议,使用 importlib,但在我的情况下,我需要在我的 idl 中使用 import。 此外,MIDL 将在您的标头中生成#include 到来自其他项目的包含头文件,您需要在项目属性中为其添加包含目录引用,因为标头位于不同的文件夹中。

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2010-10-21
    • 2011-03-10
    • 2011-08-23
    • 2011-04-10
    • 2023-03-25
    相关资源
    最近更新 更多