我想做个bho 过滤网页中的flash以下是头文件#ifndef __MYIE_H_
#define __MYIE_H_#include "resource.h"       
#include "ExDisp.h"/////////////////////////////////////////////////////////////////////////////
// CMYIE
class ATL_NO_VTABLE CMYIE : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMYIE, &CLSID_MYIE>,
public IObjectWithSiteImpl<CMYIE>,
       public IInternetProtocol,
       public IDispatchImpl<IMYIE, &IID_IMYIE, &LIBID_BHOPLUGINLib>
  
{
public:
CMYIE()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_MYIE)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CMYIE)
COM_INTERFACE_ENTRY(IMYIE)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IObjectWithSite)
       COM_INTERFACE_ENTRY(IInternetProtocol)
END_COM_MAP()// IMYIE
public:
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> mWebBrowser2;
  //  CComPtr<IInternetSession> m_spSession ;
  //  CComPtr<IClassFactory>    m_spClassFactoryMime ; STDMETHOD(SetSite)(IUnknown *pUnkSite);
HRESULT RegisterEventHandler(BOOL inAdvise);
STDMETHOD(Invoke)(DISPID dispidMember,REFIID riid, LCID lcid, WORD wFlags,
                     DISPPARAMS * pDispParams, VARIANT * pvarResult,
                     EXCEPINFO * pexcepinfo, UINT * puArgErr);
    HRESULT STDMETHODCALLTYPE Start( 
        /* [in] */ LPCWSTR szUrl,
        /* [in] */ IInternetProtocolSink __RPC_FAR *pOIProtSink,
        /* [in] */ IInternetBindInfo __RPC_FAR *pOIBindInfo,
        /* [in] */ DWORD grfPI,
        /* [in] */ DWORD dwReserved); 
};#endif //__MYIE_H_
程序怎么调用 Start 函数
我是新手,不太熟悉atl调用机制 ,那位好心大哥大姐教教小弟,不胜感谢

解决方案 »

  1.   

    比如Start屬於IX接口 IX接口由CX 
    你需要知道接口的id和組件的CLSID和接口的IID
    然後用CoCreateInstance()獲得接口指針 通過這個指針調用 最後對指針調用Release()
      

  2.   

    我应该可以用QueryInterface 查到IInternetProtocol 对象  CComPtr<IInternetProtocol> IInternetP 指针如果  IInternetP->Start() 调用, 这些参数怎么写,Start是虚函数;
    能不能像 SetSite一样, 是个回调函数, 我补充函数内容