Нужно подсовывать бровзеру конетент из своего стореджа.
Сначала использовал 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);
Если у кого какие идеи/советы есть — подскажите пожалуйста...
Зарание благодарен.