Long Long Ago

很久很久以前

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

网上搜到了监听EnvDTE::_DocumentEvents方法都是使用C#的方式的

使用C++,需要先获得EnvDTE::_DocumentEvents对象后给其Advise一个sink,但通过EnvDTE::Events获得EnvDTE::_DocumentEvents时需要传入一个EnvDTE::Document对象,表示是对哪个Document的事件进行监听。C#中传入一个MissValue,猜测C++中是传入一个NULL。

实验后,确实如此,对应的代码类似如下的样子

 

代码
 CComPtr<EnvDTE::Events> pEvents;
 m_pDTE
->get_Events(&pEvents);
 
//CComPtr<EnvDTE::_DocumentEvents> m_pDocEvent;
 pEvents->get_DocumentEvents(NULL&m_pDocEvent);
 HRESULT hr 
= ConnectDocumentEvents::DispEventAdvise(m_pDocEvent.p);
 
if (SUCCEEDED(hr))
 {
  
//...

 }

 

 

其中ConnectDocumentEvents是一个IDispEventImpl的typedef

posted on 2010-11-13 17:01  很久很久以前  阅读(468)  评论(0)    收藏  举报