MSHTML, IServiceProvider, IBindHost
От: Vishen  
Дата: 27.06.05 07:49
Оценка:
Нужно подсовывать бровзеру конетент из своего стореджа.
Сначала использовал Asynchronous Pluggable Protocols — но с ним не могут работать flash, windows media....
Теперь пытаюсь подсунуть свой IBindHost. Подсовываю свою реализацию IServiceProvider — но у нее в QueryService пытатся запросить все что угодно только не IBindHost.


Немного кода (реализация IServiceProvider):


class ATL_NO_VTABLE CMySite : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CMySite, &CLSID_MySite>,
    public IMySite,
    public IServiceProviderImpl<CMySite>,
    public IBindHost
{
//IBindHost
    STDMETHOD(CreateMoniker)( 
         LPOLESTR szName,
         IBindCtx *pBC,
         IMoniker **ppmk,
         DWORD dwReserved);
    
    STDMETHOD(MonikerBindToStorage)( 
         IMoniker *pMk,
         IBindCtx *pBC,
         IBindStatusCallback *pBSC,
         REFIID riid,
         void **ppvObj);
    
    STDMETHOD(MonikerBindToObject)( 
         IMoniker *pMk,
         IBindCtx *pBC,
         IBindStatusCallback *pBSC,
         REFIID riid,
         void **ppvObj);

//IMySite
    STDMETHOD(put_ServiceProvider)(/*[in]*/ IUnknown* newVal);
    STDMETHOD(put_OleClientSite)(/*[in]*/ IUnknown* newVal);

DECLARE_REGISTRY_RESOURCEID(IDR_MYSITE)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CMySite)
    COM_INTERFACE_ENTRY(IMySite)
    COM_INTERFACE_ENTRY(IServiceProvider)
    COM_INTERFACE_ENTRY(IBindHost)
END_COM_MAP()

BEGIN_SERVICE_MAP(CMySite)
    SERVICE_ENTRY(IID_IServiceProvider);
    SERVICE_ENTRY(SID_IBindHost);
END_SERVICE_MAP()
};



Немного кода (подсовывание IServiceProvider):


    CAxWindow::QueryControl(&m_spWebBrowser);
    m_spMySite.CoCreateInstance(__uuidof(E4Lib::MySite));

    CComPtr<IOleObject> spOleObject;
    HRESULT hr = m_spWebBrowser.QueryInterface(&spOleObject);
    CComPtr<IObjectWithSite> spObjectWithSite;
    hr = QueryHost(&spObjectWithSite);
    CComPtr<IUnknown> spUnknown;
    hr = m_spMySite.QueryInterface(&spUnknown);
    hr = spObjectWithSite->SetSite(spUnknown);
    CComVariant varEmpty;
        hr = m_spWebBrowser->Navigate(CComBSTR(sUrl),&varEmpty,&varEmpty,&varEmpty,&varEmpty);




Если у кого какие идеи/советы есть — подскажите пожалуйста...
Зарание благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.