从非托管C ++ LIB创建COM DLL

时间:2010-10-06 06:08:25

标签: c++ com

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

是的,您描述的场景是解决此问题的典型方法。

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

答案 1 :(得分:2)

我认为以你描述的方式添加包装是最好的方法。在许多情况下,OLE的参数类型将与C ++参数不同,例如, BSTR而不是字符串或char *,COM需要一些包装。唯一的选择是拥有一个非COM DLL。