STDMETHODIMP CPdnWnd::FireEvent(BSTR handler, VARIANT* parameters, DWORD nParams) { if(!m_pBrowser) return S_FALSE; IHTMLDocument2* pHTDoc; HRESULT hr; hr = m_pBrowser->get_Document((IDispatch**) &pHTDoc); if(SUCCEEDED(hr) && pHTDoc) { IHTMLWindow2* pHTWnd = NULL; hr = pHTDoc->get_parentWindow(&pHTWnd); if(SUCCEEDED(hr)) { UINT errArg; DISPID dispid; hr = pHTWnd->GetIDsOfNames(IID_NULL, &handler, 1, LOCALE_SYSTEM_DEFAULT, &dispid); if(SUCCEEDED(hr)) { DISPPARAMS dParams = { parameters, 0, nParams, 0 }; hr = pHTWnd->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dParams, 0, 0, &errArg); if(SUCCEEDED(hr)) { pHTWnd->Release(); pHTDoc->Release(); return S_OK; } } pHTWnd->Release(); } pHTDoc->Release(); } return hr; }