我有一个ATL COM服务,可以通过我的Windows窗体应用程序.NET4应用程序连接到大多数托管C++应用程序。非托管C++ COM和托管C++ .NET4互操作
我可以成功检索指向接口的指针(通过CoCreateInstance()),但在尝试实现事件接收器时遇到问题。我希望在应用程序中创建一个非托管的C++类,该类实现由COM服务器定义的接口,并从ConnectionPoint接收事件。我到目前为止:
- 意识到这是不可能的使用托管(ref class)C++类,我正在使用一个正常的非托管类。
- 不能使用任何ATL宏,我需要在接收器类中实现IUnknown抽象函数(AddRef,Release,QueryInterface等)。
我可以检索接口的IConnectionPoint指针,但对Advise()的调用返回E_NOTIMPL。这使我相信我错过了在某处实现某些ATL基本功能,但我不知道从哪里开始。另外,我在网上发现了很少有关在托管C++项目中使用COM的资源。最近我来到是this文章。有人对这个主题有什么好的看法吗?它现在正在破坏我的大脑。
感谢您的回复。你是对的,我混淆了混合托管和非托管代码。 “添加参考”选项在哪里存在?你有没有链接到这种方法的文档? – 2011-05-04 04:49:35
只需右键单击该项目,即可看到添加参考。它将打开一个对话框,其中将显示“COM”选项卡,打开该选项卡,您将看到系统上所有已注册的COM组件。基本上这只是Tlbimp.exe之上的IDE功能。这是用于为COM创建托管包装的工具。请参阅:http://msdn.microsoft.com/en-us/library/tt0cf3sx(VS.80).aspx – Ankur 2011-05-04 05:41:34