我已按照步骤here在Visual Studio 2008中创建COM DLL。我的目标是包装现有的非托管C ++ .lib。
是否有一种简单的方法来实现lib的COM接口。或者我是否只需要继续添加ATL简单对象,这些对象基本上将对象包装在我的库中?
例如,我已经将简单的ATL对象CMyObject添加到我的COM库中,我是否在CMyObject中创建包含函数成员等的包装代码,它基本上包装了非托管C ++库中包含的MyObject的行为?
答案 0 :(得分:3)
为了向COM公开您的功能,您需要执行两个主要步骤:
是的,您描述的场景是解决此问题的典型方法。
使用ATL会简化很多事情。但是,您还必须处理异常。由于您的代码使用C ++,因此可能会抛出异常。 COM不允许在COM方法之外传播异常 - 如果客户端不在C ++中,一旦从代码中抛出异常,它就会崩溃。因此,对于从COM直接调用的每个方法,您的包装层需要try
- catch
。
答案 1 :(得分:2)
我认为以你描述的方式添加包装是最好的方法。在许多情况下,OLE的参数类型将与C ++参数不同,例如, BSTR而不是字符串或char *,COM需要一些包装。唯一的选择是拥有一个非COM DLL。