#include ".\dochostuihandler.h" // // IUnknown Implementation // /************************************************************************** CExplorerBar::QueryInterface **************************************************************************/ STDMETHODIMP CDocHostUIHandler::QueryInterface(REFIID riid, LPVOID *ppReturn) { HRESULT hr=E_NOINTERFACE; *ppReturn = NULL; char *sInterface="E_NOINTERFACE"; if (IsEqualIID(riid, __uuidof(IUnknown))) {sInterface = "IUnknown"; *ppReturn = (IUnknown*)this;} else if (IsEqualIID(riid, __uuidof(IDispatch))) {sInterface = "IDispatch"; *ppReturn = (IDispatch*)this;} if(*ppReturn) { (*(LPUNKNOWN*)ppReturn)->AddRef(); hr = S_OK; } return hr; } /************************************************************************** CExplorerBar::AddRef **************************************************************************/ STDMETHODIMP_(DWORD) CDocHostUIHandler::AddRef() {return ++m_ObjRefCount;} /************************************************************************** CExplorerBar::Release **************************************************************************/ STDMETHODIMP_(DWORD) CDocHostUIHandler::Release() { return 1; //single non-COM object manually maintained if(--m_ObjRefCount == 0) { delete this; return 0; } return m_ObjRefCount; } CDocHostUIHandler::CDocHostUIHandler(CExplorerBar *pCExplorerBar): m_ObjRefCount(0), m_pCExplorerBar(pCExplorerBar) { mNameDISPID[DISPID_CUSTOM_LOCAL_GETDOCUMENT] = L"Container_Local_GetDocument"; mNameDISPID[DISPID_CUSTOM_LOCAL_REQUESTDOM] = L"Container_Local_RequestDOM"; mNameDISPID[DISPID_CUSTOM_LOCAL_RELEASEDOCUMENT] = L"Container_Local_ReleaseDocument"; mNameDISPID[DISPID_CUSTOM_LOCAL_FINDTEXTS] = L"Container_Local_FindTexts"; mNameDISPID[DISPID_CUSTOM_LOCAL_MARKUPTEXTS] = L"Container_Local_MarkupTexts"; mNameDISPID[DISPID_CUSTOM_LOCAL_SETREGVALUE] = L"Container_Local_SetRegValue"; mNameDISPID[DISPID_CUSTOM_LOCAL_GETREGVALUE] = L"Container_Local_GetRegValue"; mNameDISPID[DISPID_CUSTOM_LOCAL_ANALYSECONTENT] = L"Container_Local_AnalyseContent"; } CDocHostUIHandler::~CDocHostUIHandler(void) {} STDMETHODIMP CDocHostUIHandler::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { return m_pCExplorerBar->InvokeFromPage(dispIdMember-1, pDispParams, pVarResult, pExcepInfo, puArgErr); } STDMETHODIMP CDocHostUIHandler::GetTypeInfoCount(UINT *pctinfo) { MessageBox(0, "GetTypeInfoCount request", "CDocHostUIHandler error", 0); *pctinfo = NULL; return E_NOTIMPL; } STDMETHODIMP CDocHostUIHandler::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { MessageBox(0, "GetTypeInfo request", "CDocHostUIHandler error", 0); *ppTInfo = NULL; return E_NOTIMPL; } STDMETHODIMP CDocHostUIHandler::GetIDsOfNames( REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { DEBUGPRINT("CDocHostUIHandler::GetIDsOfNames", DEBUG_FUNCTIONSTART); HRESULT hr = S_OK; DISPID iID; if (cNames) { DEBUGPRINT(rgszNames[0], DEBUG_CHECK); //loop around the name array looking for the method iID = DISPID_UNKNOWN; //-1 for (int i = 0; iID == DISPID_UNKNOWN && i < DISPIDMAX; i++) { DEBUGPRINT(mNameDISPID[i], DEBUG_LINE_QUALIFIED); if (!wcscmp(rgszNames[0], mNameDISPID[i])) iID = i; } *rgDispId = iID + 1; if (iID == DISPID_UNKNOWN) { DEBUG_RESULT_FAIL; hr = DISP_E_UNKNOWNNAME; } else DEBUG_RESULT_OK; } DEBUGPRINT("CDocHostUIHandler::GetIDsOfNames", DEBUG_FUNCTIONEND); return hr; }