非托管C ++ COM和托管C ++ .NET4互操作

我有一个ATL COM服务,可以通过我的Windows窗体应用程序.NET4应用程序连接到大多数托管c ++应用程序。

我可以成功地检索指向接口的指针(通过CoCreateInstance()),但在尝试实现事件接收器时遇到问题。 我希望在应用程序中创建一个非托管的c ++类,该类实现由COM服务器定义的接口,并从ConnectionPoint接收事件。 我到目前为止:

  • 使用托管(ref class)c ++类实现这一点是不可能的,我使用了一个普通的非托管类。
  • 不能使用任何ATL宏,我需要在接收器类中实现IUnknown抽象函数(AddRef,Release,QueryInterface等)。
  • 我可以检索该接口的IConnectionPoint指针,但对Advise()的调用返回E_NOTIMPL。 这使我相信我错过了在某处实现某些ATL基本功能,但我不知道从哪里开始。

    顺便说一句,我在网上发现了很少有关在托管c ++项目中使用COM的资源。 我接近的就是这篇文章。 有人对这个主题有什么好的看法吗? 它现在正在破坏我的大脑。


    在托管的C ++应用程序中,使用“添加引用”选项添加对COM服务器的引用,这将为您的COM组件创建一个托管包装程序(程序集),您可以在“托管c ++代码”中使用它。 COM组件中的事件应该作为.NET事件提供,可以使用托管C ++中的常规事件处理来处理。

    从您的描述看来,您似乎在尝试使用非托管代码来使用托管C ++应用程序中的COM组件,这使事情变得复杂。 混合托管代码和非托管代码应该有明确的界限,并且跳过这些界限会使事情变得复杂并且会导致其他严重问题。 因此,我建议你使用“托管代码”(c ++)仅使用bu创建COM组件的托管包装来使用COM组件。

    链接地址: http://www.djcxy.com/p/81311.html

    上一篇: Unmanaged C++ COM and Managed C++ .NET4 interop

    下一篇: Handling COM events in C++ (ATL, MFC or pure C++) for Java interop