【问题标题】:Create COM DLL from Unmanaged C++ LIB从非托管 C++ LIB 创建 COM DLL
【发布时间】:2011-04-21 15:45:30
【问题描述】:

我已经按照here 的步骤在 Visual Studio 2008 中创建了一个 COM DLL。我的目标是包装一个现有的非托管 C++ .lib。

有没有一种简单的方法来实现 lib 的 COM 接口。还是我只需要继续添加基本上将对象包装在我的库中的 ATL 简单对象?

例如,我已将简单的 ATL 对象 CMyObject 添加到我的 COM 库中,我是否要在 CMyObject 中创建包含函数成员等的包装器代码,以包装非托管 C++ 库中包含的 MyObject 的行为?

【问题讨论】:

    标签: c++ com


    【解决方案1】:

    为了向 COM 公开您的功能,您需要执行两个主要步骤:

    • 介绍COM接口
    • 使用您已有的代码功能实现这些接口

    所以是的,你描述的场景是解决这个问题的典型方法。

    使用 ATL 会大大简化事情。但是,您也必须处理异常。由于您的代码是在 C++ 中的,因此它可能会引发异常。 COM 不允许在 COM 方法之外传播异常 - 如果客户端不在 C++ 中,一旦从您的代码中引发异常,它将崩溃。所以你的包装层需要有try-catch 用于直接从 COM 调用的每个方法。

    【讨论】:

    • +1,关于容易被忽略的异常的要点。
    【解决方案2】:

    我认为按照您描述的方式添加包装器是最好的方法。鉴于 OLE 的参数类型在许多情况下与 C++ 参数不同,例如BSTR 而不是 string 或 char*,COM 需要一些包装。唯一的选择是使用非 COM DLL。

    【讨论】:

      猜你喜欢
      • 2020-05-03
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多