实现和IE浏览器交互的几种方法的介绍

http://tech.ddvip.com   2006年03月31日    社区交流

本文详细介绍实现和IE浏览器交互的几种方法的介绍

  然后我们通过IConnectPoint接口的方法Advice使每当IE有一个新的事件发生的时候,都能够让我们的DLL知道。可以用如下的语句实现:

  hr = spConnectionPoint- >Advise(
(IDispatch*)this, &m_dwIDCode);

  在把IE实例中的事件和我们的DLL之间建立联系以后,我们可以通过IDispatch接口的Invoke()方法来处理所有的IE的事件。

  3. IDispatch接口的Invoke()方法。IDispatch是从IUnknown中继承的一个接口的类型,通过COM接口提供的任何服务都可以通过IDispatch接口来实现。IDispatch::Invoke的工作方式同vtbl幕后的工作方式是类似的,Invoke将实现一组按索引来访问的函数,我们可以对Invoke方法进行动态的定制以提供不同的服务。Invoke方法的表示如下:

  STDMETHOD(Invoke)(DISPID dispidMember,REFIID
riid, LCID lcid, WORD wFlags,
DISPPARAMS * pdispparams, VARIANT * pvarResult,
EXCEPINFO * pexcepinfo, UINT * puArgErr);

  其中,DISPID是一个长整数,它标识的是一个函数。对于IDispatch的某一个特定的实现,DISPID都是唯一的。IDispatch的每一个实现都有其自己的IID,这里dispidMemeber实际上是可以认为是和IE实例所发生的每一个事件相关的方法,比如:DISPID_BEFORENAVIGATE2,DISPID_NAVIGATECOMPLETE2等等。 这个方法中另外一个比较重要的参数是DISPPARAMS,它的结构如下:

  typedef struct tagDISPPARAMS
   {
     VARIANTARG* rgvarg;
//VARIANTARG是同VARAIANT相同的,可以在
   //OAIDL.IDL中找到。所以实际上rgvarg是一个参数数
    //组
     DISPID* rgdispidNameArgs; //命名参数的DISPID
     unsigned int cArgs;  //表示数组中元素的个数
     unsigned int CnameArgs; //命名元素的个数
   }DISPPARAMS

责编:豆豆技术应用

正在加载评论...