HRESULT WebBrowserEventSinker::SetCustomDocUIHandler(LPDISPATCH lpDisp)
{
	if(lpDisp == NULL)
		return E_INVALIDARG;

	IWebBrowser2Ptr pWebBrowser2;
	HRESULT hr = lpDisp->QueryInterface(IID_IWebBrowser2, (void**)&pWebBrowser2);

	if(SUCCEEDED(hr) && pWebBrowser2)
	{
		IDispatchPtr pDoc;
		hr = pWebBrowser2->get_Document(&pDoc);

		if(SUCCEEDED(hr) && pDoc)
		{
			ICustomDocPtr pCustDoc;
			hr = pDoc->QueryInterface(IID_ICustomDoc, (void**)&pCustDoc);
			if(SUCCEEDED(hr) && pCustDoc != NULL)
			{				
				IDocHostUIHandler* pUIHandler;
				CreateObjectInterface<CDocHostUIHandler, IDocHostUIHandler>(NULL, &pUIHandler);

				if (pUIHandler)
					pCustDoc->SetUIHandler(pUIHandler);

				pUIHandler->Release();
			}
		}
	}

	return hr;
}
HRESULT vmsDomHelper::GetWindowDocument(IHTMLWindow2* pWnd, IHTMLDocument2** ppDoc)
{
	assert (pWnd != NULL && ppDoc != NULL);
	if (!ppDoc)
		return E_INVALIDARG;
	*ppDoc = NULL;
	if (!pWnd)
		return E_INVALIDARG;

	HRESULT hr = pWnd->get_document (ppDoc);

	if (*ppDoc)
		return hr;

	IWebBrowser2Ptr spWB;
	GetWebBrowser (pWnd, &spWB);

	if (spWB != NULL)
	{
		IDispatchPtr spdDoc;
		spWB->get_Document (&spdDoc);
		if (spdDoc != NULL)
		{
			spdDoc->QueryInterface (IID_IHTMLDocument2, (void**)ppDoc);
			if (*ppDoc)
				hr = S_OK;
		}
	}
	
	return hr;
}
示例#3
1
SolidEdgeConstants::ObjectType GetObjectType(IDispatchPtr pDispatch)
{
	HRESULT hr = S_OK;

	if (pDispatch != NULL)
	{
		DISPID rgDispId = 0;
		OLECHAR *Names[1] = { L"Type" };
		VARIANT varResult;
		VariantInit(&varResult);
		V_VT(&varResult) = VT_I4;
		DISPPARAMS disp = { NULL, NULL, 0, 0 };

		// Get the DISPID of the 'Type' property.
		IfFailGo(pDispatch->GetIDsOfNames(IID_NULL, Names, 1, LOCALE_USER_DEFAULT, &rgDispId));

		// Invoke the 'Type' property.
		IfFailGo(pDispatch->Invoke(rgDispId, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &disp, &varResult, NULL, NULL));

		return (SolidEdgeConstants::ObjectType)(V_I4(&varResult));		
	}

Error:
	return (SolidEdgeConstants::ObjectType)0;
}
示例#4
1
HRESULT GenericCLRLoader::CreateCOMObject(const ATL::CString& sAssemblyFile, const ATL::CString& sAssemblyName, const ATL::CString& sTypeName, 
	IUnknown** ppIUnk, const ATL::CString& sConfigFile , const ATL::CString& sDomainName , int LocaleID )
{
	mscorlib::_ObjectHandlePtr spObjectHandle;

	HRESULT hr = GenericCLRLoader::TheInstance()->CreateObject(sAssemblyFile, sAssemblyName, sTypeName, &spObjectHandle, sConfigFile, sDomainName, LocaleID);

	if (SUCCEEDED(hr) && (spObjectHandle != NULL))
	{
		CComVariant vUnwrapped;
		spObjectHandle->Unwrap(&vUnwrapped);
		if(vUnwrapped.vt == VT_DISPATCH)
		{
			IDispatchPtr pDisp = vUnwrapped.pdispVal;
			return pDisp->QueryInterface(IID_IUnknown, (void**)ppIUnk);
		}
		if (vUnwrapped.vt == VT_UNKNOWN)
		{
			*ppIUnk = vUnwrapped.punkVal;
			(*ppIUnk)->AddRef();
			return S_OK;
		}

		return E_NOINTERFACE;
	}

	if (SUCCEEDED(hr) && spObjectHandle == NULL)
		return E_POINTER;

	return hr;
}
示例#5
1
HRESULT
nsScriptablePeer::GetIDispatch(IDispatch **pdisp)
{
    if (pdisp == NULL)
    {
        return E_INVALIDARG;
    }
    *pdisp = NULL;

    IUnknownPtr unk;
    HRESULT hr = mPlugin->pControlSite->GetControlUnknown(&unk);
    if (unk.GetInterfacePtr() == NULL)
    {
		return E_FAIL; 
	}

    IDispatchPtr disp = unk;
    if (disp.GetInterfacePtr() == NULL)
    { 
        return E_FAIL; 
    }

    *pdisp = disp.GetInterfacePtr();
    (*pdisp)->AddRef();

    return S_OK;
}
示例#6
1
STDMETHODIMP_(void) CPdnWnd::NavigateComplete2(IDispatch *pDisp, VARIANT *URL)
{
	IDispatchPtr pDocDisp;
	ICustomDoc* pCustomDoc;
	m_pBrowser->get_Document(&pDocDisp);
	pDocDisp->QueryInterface(IID_ICustomDoc, (LPVOID*) &pCustomDoc);
 	HRESULT hr = 
		pCustomDoc->SetUIHandler(dynamic_cast<IDocHostUIHandler*>(this));
	pCustomDoc->Release();
}
示例#7
1
文件: Reference.cpp 项目: jbroll/tcom
const Interface *
Reference::findInterfaceFromDispatch (IUnknown *pUnknown)
{
    HRESULT hr;

    // See if the object implements IDispatch.
    IDispatchPtr pDispatch;
    hr = pUnknown->QueryInterface(
        IID_IDispatch, reinterpret_cast<void **>(&pDispatch));
    if (FAILED(hr)) {
        return 0;
    }

    // Ask the IDispatch interface for type information.
    unsigned count;
    hr = pDispatch->GetTypeInfoCount(&count);
    if (hr == E_NOTIMPL) {
        return 0;
    }
    if (FAILED(hr)) {
        _com_issue_error(hr);
    }
    if (count == 0) {
        return 0;
    }

    ITypeInfoPtr pTypeInfo;
    hr = pDispatch->GetTypeInfo(
        0, 
        LOCALE_USER_DEFAULT,
        &pTypeInfo);
    if (FAILED(hr)) {
        _com_issue_error(hr);
    }

    // Get the interface description.
    TypeAttr typeAttr(pTypeInfo);

    if (IsEqualIID(typeAttr->guid, __uuidof(DotNetObject))) {
        // The .NET Framework implements IDispatch::GetTypeInfo for classes
        // declared with the attribute ClassInterface(ClassInterfaceType.None)
        // by returning a description of the _Object interface.
        return 0;
    }

    const Interface *pInterface =
        InterfaceManager::instance().newInterface(typeAttr->guid, pTypeInfo);

    if (pInterface->methods().empty() && pInterface->properties().empty()) {
        // No invokable methods or properties where found in the interface
        // description.
        return 0;
    }
    return pInterface;
}
示例#8
1
HRESULT CMObject::GetActiveObject(const CLSID clsid)
{
	HRESULT hr;
	IDispatchPtr tmpobj;
	Release();
	hr=tmpobj.GetActiveObject(clsid);
	if(SUCCEEDED(hr))
		p=tmpobj.Detach();
	return hr;

}
示例#9
1
HRESULT CMObject::CreateObject(const CLSID clsid)
{
	HRESULT hr;
	IDispatchPtr tmpobj;
	Release();
	hr=tmpobj.CreateInstance(clsid);
	if (SUCCEEDED(hr))
		p=tmpobj.Detach();
	return hr;

}
void TestPowerPointControllerImpl::TestNewInstance()
{	
	IDispatchPtr spApplication(_T("PowerPoint.Application"));
	assertMessage(spApplication != NULL, _T("Failed to create an instance of [PowerPoint.Application]"));

	CControllerImplPtr spImplementor(CreateImplementor());	
	spImplementor->m_bUseExistingInstance = false;
	spImplementor->Initialize();

	IDispatchPtr spHostApplication = spImplementor->GetApplication();	
	assertMessage(spHostApplication.GetInterfacePtr() != spApplication.GetInterfacePtr(), _T("CPowerPointControllerImpl::GetApplication did not create a new instance of PowerPoint."));	
}
void TestPowerPointControllerImpl::TestUseExistingInstance()
{	
	IDispatchPtr spApplication(_T("PowerPoint.Application"));
	assertMessage(spApplication != NULL, _T("Failed to create an instance of [PowerPoint.Application]"));

	CControllerImplPtr spImplementor(CreateImplementor());	
	spImplementor->m_bUseExistingInstance = true;
	spImplementor->Initialize();

	IDispatchPtr spHostApplication = spImplementor->GetApplication();
	// There is a problem getting the current instance of PowerPoint 97; hence the instance returned will be nil.
	assertMessage(spHostApplication.GetInterfacePtr() != spApplication.GetInterfacePtr(), _T("CPowerPointControllerImpl::GetApplication should not return the existing instance of PowerPoint 97."));	
}
示例#12
1
HRESULT CMObject::GetActiveObject(LPCTSTR objName)
{
	HRESULT hr;
	IDispatchPtr tmpobj;
	Release();
#ifdef _UNICODE
	hr=tmpobj.GetActiveObject((LPOLESTR)objName);
#else
	hr=tmpobj.GetActiveObject(objName);
#endif
	if(SUCCEEDED(hr))
		p=tmpobj.Detach();
	return hr;
}
示例#13
1
HRESULT CMObject::CreateObject(LPCTSTR objName)
{
	HRESULT hr;
	IDispatchPtr tmpobj;
	Release();
#ifdef _UNICODE
	hr=tmpobj.CreateInstance( (LPOLESTR)objName);
#else
	hr=tmpobj.CreateInstance((LPCSTR)objName);
#endif
	if (SUCCEEDED(hr))
		p=tmpobj.Detach();
	return hr;
}
示例#14
1
void CNetRadioDlg::OnBnClickedTest()
{
	CString strValue;
	IHTMLDocument2* pDoc = (IHTMLDocument2*)m_Browser.GetHtmlDocument();
	HRESULT hr = S_FALSE;
	IHTMLElementCollection* pAllElem = NULL;
	IHTMLElementCollection* pAllScript = NULL;
	IHTMLElement* pElem = NULL;

	hr = pDoc->get_scripts(&pAllScript);
	if(SUCCEEDED(hr) && pAllScript != NULL)
	{
		IDispatchPtr pElemDisp = NULL;
		_variant_t varID(1);
		_variant_t varIdx(0);
		hr = pAllScript->item(varID, varIdx, &pElemDisp);
		if(SUCCEEDED(hr) && pElemDisp != NULL)
		{
			hr = pElemDisp->QueryInterface(IID_IHTMLElement,(void**)&pElem);
			if(SUCCEEDED(hr) && pElem != NULL)
			{
				BSTR bstrTagName;
				hr = pElem->get_outerHTML(&bstrTagName);
			
				hr = pElem->get_outerHTML(&bstrTagName);
				if(SUCCEEDED(hr))
				{
					CString strTagName(bstrTagName);
					SysFreeString(bstrTagName);
					MessageBox(strTagName);
				}
			}
		}
	}

	hr = pDoc->get_all(&pAllElem);

	if(SUCCEEDED(hr) && pAllElem != NULL)
	{
		IDispatchPtr pElemDisp = NULL;
		_variant_t varID(_T("body"));
		_variant_t varIdx(0);
		hr = pAllElem->item(varID, varIdx, &pElemDisp);
		if(SUCCEEDED(hr) && pElemDisp != NULL)
		{
			MessageBox(_T("OK"));
		}
	}

}
bool CExcelDOMStripperStrategy::Excel2007MarkedAsFinal(IDispatchPtr spDispWorkbook)
{
	if (Excel2007(spDispWorkbook))
	{
		DISPID dispid = 0;
		LPOLESTR propertyName = L"Final";
		HRESULT hr = spDispWorkbook->GetIDsOfNames(IID_NULL, &propertyName, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
		if(FAILED(hr))
		{
			std::tostringstream msg; 
			msg << _T("Failed to obtain the dispid of the [Final] property on the Workbook.") << std::ends;
			throw Workshare::Com::ComException(msg.str().c_str(), hr, spDispWorkbook);
		}

		short value = 0;
		hr = _com_dispatch_propget(spDispWorkbook, dispid, VT_BOOL, (void*)&value);
		if(FAILED(hr))
		{
			std::tostringstream msg; 
			msg << _T("Failed to obtain the [Final] property on the Workbook.") << std::ends;
			throw Workshare::Com::ComException(msg.str().c_str(), hr, spDispWorkbook);
		}
		
		if (value == -1)
			return true;
	}

	return false;
}
bool vmsDomHelper::IsJSFunctionKnown(IHTMLDocument *pDoc, BSTR bsFuncName)
{
	ATLASSERT (pDoc != NULL);
	if (!pDoc)
		return false;
	
	IDispatchPtr spScript;
	HRESULT hr = pDoc->get_Script (&spScript);
	if (spScript == NULL)
		return false;
	
	DISPID did = NULL;
	hr = spScript->GetIDsOfNames (IID_NULL, &bsFuncName, 1, LOCALE_SYSTEM_DEFAULT, &did);

	return SUCCEEDED (hr);
}
示例#17
1
bool CCOMDispatchHelper::DoesMethodExistOnInterface(const IDispatchPtr& spDisp, LPCTSTR lszMethodName)
{
	USES_CONVERSION;
	DISPID rgDispId = 0;
	OLECHAR FAR* szMember = T2OLE(const_cast<LPTSTR>(lszMethodName));
	HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &rgDispId);
	return (S_OK == hr && -1 != rgDispId);
}
示例#18
1
文件: WebWindow.cpp 项目: 0anion0/IBN
void CWebWindow::TryLoadXML()
{
	if(m_bQueryAttachXML&&m_AttachLoadXML.Length())
	{
		HRESULT hr = S_OK;
		IUnknownPtr spUnk = m_browser.GetControlUnknown();
		/////////
		// Run Script
		////////
		if(spUnk)
		{
			CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> spWB2(spUnk);
			if(spWB2)
			{
				IDispatchPtr spDispDoc = NULL;
				hr = spWB2->get_Document(&spDispDoc);
				if(spDispDoc)
				{
					CComQIPtr<IHTMLDocument, &IID_IHTMLDocument> spDoc(spDispDoc);
					if(spDoc)
					{
						IDispatchPtr spDispScript = NULL;
						hr = spDoc->get_Script(&spDispScript);
						if(spDispScript)
						{
							DISPID dispid = -1;
							OLECHAR FAR* szMember = L"LoadXML";
							hr = spDispScript->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
							if(SUCCEEDED(hr))
							{
								
								CComVariant* pvars = new CComVariant[1];
								pvars[0] = CComVariant((BSTR)m_AttachLoadXML);
								
								DISPPARAMS params = { pvars, NULL, 1, 0 };
								hr = spDispScript->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, NULL, NULL, NULL);
								delete []pvars;
							}
						}
					}
				}
			}
		}
	}
}
示例#19
1
CardVideoObjects::_UserPtr CCardVideoSystem::GetUser(LPCTSTR strCardNumber)
{
	ASSERT(0 != m_pSystem);
	CardVideoObjects::_UserPtr pUser;
	IDispatchPtr pDispatch;
	
	pDispatch = m_pSystem->GetUserByCardNumber(_bstr_t(strCardNumber));
	if (pDispatch)
	{
		pDispatch.QueryInterface(CardVideoObjects::IID__User,&pUser);
		pDispatch.Release();
		if (0 != pUser)
		{
			return pUser;
		}
	}
	return (CardVideoObjects::_UserPtr)0;
}
示例#20
1
/* void setProperty (in string propertyName, in string propertyValue); */
NS_IMETHODIMP
nsScriptablePeer::SetProperty(const char *propertyName, nsIVariant *propertyValue)
{
    HRESULT hr;
    DISPID dispid;
    IDispatchPtr disp;
    if (FAILED(GetIDispatch(&disp)))
    {
        return NPERR_GENERIC_ERROR; 
    }
    USES_CONVERSION;
    OLECHAR* szMember = A2OLE(propertyName);
    hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    _variant_t v;
    ConvertVariants(propertyValue, &v);
    
    DISPID dispIdPut = DISPID_PROPERTYPUT;
    DISPPARAMS functionArgs;
    _variant_t vResult;
    
    functionArgs.rgdispidNamedArgs = &dispIdPut;
    functionArgs.rgvarg = &v;
    functionArgs.cArgs = 1;
    functionArgs.cNamedArgs = 1;

    hr = disp->Invoke(
        dispid,
        IID_NULL,
        LOCALE_USER_DEFAULT,
        DISPATCH_PROPERTYPUT,
        &functionArgs, &vResult, NULL, NULL);
    
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    return NS_OK;
}
HRESULT vmsDomHelper::ExecJScript(IHTMLDocument *pDoc, BSTR bstrFuncName, const vector <CComVariant>& vArgs, CComVariant &vaResult)
{
	ATLASSERT (pDoc != NULL);
	if (!pDoc)
		return E_INVALIDARG;

	IDispatchPtr spScript;
	HRESULT hr = pDoc->get_Script (&spScript);
	if (spScript == NULL)
		return hr;

	DISPID did = NULL;
	hr = spScript->GetIDsOfNames (IID_NULL, &bstrFuncName, 1, LOCALE_SYSTEM_DEFAULT, &did);
	if (FAILED (hr))
		return hr;

	DISPPARAMS dparams;
	ZeroMemory (&dparams, sizeof (dparams));
	dparams.cArgs = vArgs.size ();
	if (dparams.cArgs)
		dparams.rgvarg = new VARIANT [dparams.cArgs];

	for (int i = 0; i < vArgs.size (); i++)
	{
		CComVariant vaTmp; vaTmp.Copy (&vArgs [vArgs.size () - i - 1]);
		VariantInit (&dparams.rgvarg [i]);
		vaTmp.Detach (&dparams.rgvarg [i]);
	}

	EXCEPINFO ei;
	ZeroMemory (&ei, sizeof (ei));
	UINT nArgErr = (UINT)-1;

	hr = spScript->Invoke (did, IID_NULL, 0, DISPATCH_METHOD, &dparams, &vaResult, &ei, &nArgErr);

	if (dparams.rgvarg)
	{
		for (int i = 0; i < dparams.cArgs; i++)
			VariantClear (&dparams.rgvarg [i]);
		delete [] dparams.rgvarg;
	}

	return hr;
}
HRESULT vmsDomHelper::GetParentDocument(IHTMLDocument2 *pDoc, IHTMLDocument2 **ppParentDoc)
{
	*ppParentDoc = NULL;

	ATLASSERT (pDoc != NULL);
	if (!pDoc)
		return E_INVALIDARG;

	IHTMLWindow2Ptr spWnd;
	HRESULT hr = pDoc->get_parentWindow (&spWnd);
	if (FAILED (hr))
		return hr;

	IHTMLWindow2Ptr spWndParent;
	hr = spWnd->get_parent (&spWndParent);
	if (FAILED (hr))
		return hr;

	hr = spWndParent->get_document (ppParentDoc);
	if (hr == E_ACCESSDENIED)
	{
		IWebBrowser2Ptr spWB;
		hr = GetWebBrowser (spWndParent, &spWB);
		if (FAILED (hr))
			return E_ACCESSDENIED;
		IDispatchPtr spdDoc;
		hr = spWB->get_Document (&spdDoc);
		if (FAILED (hr))
			return hr;
		hr = spdDoc->QueryInterface (IID_IHTMLDocument2, (void**)ppParentDoc);
	}
	if (FAILED (hr))
		return hr;

	IUnknownPtr spUnk1 (pDoc);
	IUnknownPtr spUnk2 (*ppParentDoc);
	if (pDoc == *ppParentDoc || spUnk1 == spUnk2)
	{
		(*ppParentDoc)->Release ();
		*ppParentDoc = NULL;
	}

	return S_OK;
}
示例#23
1
NS_IMETHODIMP 
nsScriptablePeer::GetProperty(const char *propertyName, nsIVariant **_retval)
{
    HRESULT hr;
    DISPID dispid;
    IDispatchPtr disp;
    if (FAILED(GetIDispatch(&disp)))
    {
        return NPERR_GENERIC_ERROR; 
    }
    USES_CONVERSION;
    OLECHAR* szMember = A2OLE(propertyName);
    hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    _variant_t vResult;
    
    DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
    hr = disp->Invoke(
        dispid,
        IID_NULL,
        LOCALE_USER_DEFAULT,
        DISPATCH_PROPERTYGET,
        &dispparamsNoArgs, &vResult, NULL, NULL);
    
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR;
    }

    nsCOMPtr<nsIVariant> propertyValue;
    ConvertVariants(&vResult, getter_AddRefs(propertyValue));
    *_retval = propertyValue;
    NS_IF_ADDREF(*_retval);

    return NS_OK;
}
示例#24
1
_bstr_t RunMatlab( char* strMFile )
{
	CoInitialize(NULL);

	_bstr_t ret;
	//ensure the smarter pointer is destroyed before CoUninitialize
	{
		IDispatchPtr spDisp;
		spDisp.CreateInstance( "Matlab.Application.Single" );

		DIMLAppPtr spMatlabApp;
		spDisp.QueryInterface( __uuidof(spDisp), &spMatlabApp );	
		spDisp = NULL;

		spMatlabApp->Execute( _bstr_t("rand(seed, 999)") );
		ret = spMatlabApp->Execute( _bstr_t(strMFile) );
	}

	CoUninitialize();

	return ret;
}
示例#25
1
HRESULT CCOMDispatchHelper::AutoWrap(int autoType, VARIANT* pvResult, const IDispatchPtr& spDisp, 
									 LPOLESTR ptName, int cArgs...)
{
	if(spDisp == 0) 
		return E_INVALIDARG;

	va_list marker;
	va_start(marker, cArgs);

	DISPPARAMS dp = { NULL, NULL, 0, 0 };
	DISPID dispidNamed = DISPID_PROPERTYPUT;
	DISPID dispID;
	HRESULT hr;
	TCHAR szName[MAX_PATH];

	WideCharToMultiByte(CP_ACP, 0, ptName, -1, (LPSTR)szName, 256, NULL, NULL);

	hr = spDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
	RETURN_FAILED(hr);

	VARIANT *pArgs = new VARIANT[cArgs+1];
	for(int i=0; i<cArgs; i++) 
		pArgs[i] = va_arg(marker, VARIANT);

	dp.cArgs = cArgs;
	dp.rgvarg = pArgs;

	if(autoType & DISPATCH_PROPERTYPUT) 
	{
		dp.cNamedArgs = 1;
		dp.rgdispidNamedArgs = &dispidNamed;
	}
	
	hr = spDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);

	va_end(marker);
	delete [] pArgs;
	return hr;
}
示例#26
1
NS_IMETHODIMP
nsScriptablePeer::InternalInvoke(const char *aMethod, unsigned int aNumArgs, nsIVariant *aArgs[])
{
    HRESULT hr;
    DISPID dispid;

    IDispatchPtr disp;
    if (FAILED(GetIDispatch(&disp)))
    {
        return NPERR_GENERIC_ERROR; 
    }

    USES_CONVERSION;
    OLECHAR* szMember = A2OLE(aMethod);
    hr = disp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR; 
    }
    
    _variant_t *pArgs = NULL;
    if (aNumArgs > 0)
    {
        pArgs = new _variant_t[aNumArgs];
        if (pArgs == NULL)
        {
            return NS_ERROR_OUT_OF_MEMORY;
        }
        for (unsigned int i = 0; i < aNumArgs; i++)
        {
            hr = ConvertVariants(aArgs[i], &pArgs[i]);
            if (FAILED(hr))
            {
                delete []pArgs;
                return NS_ERROR_INVALID_ARG;
            }
        }
    }

    DISPPARAMS dispparams = {NULL, NULL, 0, 0};
    _variant_t vResult;

    dispparams.cArgs = aNumArgs;
    dispparams.rgvarg = pArgs;

    hr = disp->Invoke(
        dispid,
        IID_NULL,
        LOCALE_USER_DEFAULT,
        DISPATCH_METHOD,
        &dispparams, &vResult, NULL, NULL);

    if (pArgs)
    {
        delete []pArgs;
    }

    if (FAILED(hr))
    { 
        return NPERR_GENERIC_ERROR; 
    }

    return NS_OK;
}
示例#27
1
HRESULT CSaveAsObject::PopulateContextItemsEx(IContextItemsPtr& pContextItems, DocProviderWorker* pWorker, IManDocumentPtr& pBaseDocument, long lFormatIndex, const CStdString& sFormatString, const CStdString& sDescription, IManSessionPtr& pSession, const CStdString& sFilename)
{
	HRESULT hr = E_FAIL;
	try
	{
		hr = pContextItems.CreateInstance(__uuidof(ContextItems));
		if(pContextItems == NULL)
		{
			LOG_WS_ERROR(_T("Context object is null"))	;
			return hr;
		}

		IManDatabasePtr pDatabase;
		if (NULL != pBaseDocument)
		{
			pDatabase = pBaseDocument->Database;
		}
		else
		{
			pDatabase = pSession->PreferredDatabase;
		}

		// Makes IW bring up supplemental dialog for .doc files if this line is omitted -> find out why IB/JC removed it
		_bstr_t bstrAppType = GetApplicationIDFromFileName(pDatabase, sFilename);
		PopulateContextItems(pContextItems, L"IManExt.Import.DocType", bstrAppType);

		if (!m_hWnd)
		{
			m_hWnd = GetDesktopWindow();
		}
		hr = PopulateContextItems(pContextItems, L"ParentWindow", (long)m_hWnd);
		if (FAILED(hr))
		{
			return hr;
		}

		IDispatchPtr pDMSDisp = pWorker->GetSessionsMgr()->GetNRTDMS().GetInterfacePtr();
		if (pDMSDisp == NULL)
		{
			LOG_WS_ERROR(_T("QI for NRTDMS failed"));
			return S_FALSE;
		}

		hr = PopulateContextItems(pContextItems, L"IManDMS", pDMSDisp.GetInterfacePtr());
		if (FAILED(hr))
		{
			return hr;
		}

		hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocDescription", (LPCTSTR) sDescription);
		if (FAILED(hr))
		{
			return hr;
		}

		hr = PopulateContextItems(pContextItems, L"IManExt.Import.InheritSecurity", _T("True"));
		if (FAILED(hr))
		{
			return hr;
		}
					
		if(IsAutoProfiling())
		{		
			hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocAuthor", pSession->GetUserID());
			if (FAILED(hr))
			{
				return hr;
			}

			CStdString sDefaultDocClass = L"doc";
			CStdString sAlternateFlagName = m_bConversion ? L"InterwovenUseConversionAlternateClassName" : L"InterwovenUseAlternateClassName";
			CStdString sAlternateOptionClassName = m_bConversion ? L"InterwovenConversionAlternateClassName" : L"InterwovenAlternateClassName";
			if (Workshare::OptionApi::GetBool(sAlternateFlagName))
			{
				CStdString sClass = Workshare::OptionApi::GetString(sAlternateOptionClassName);
				if (!sClass.IsEmpty())
					sDefaultDocClass = sClass;
			}

			hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocClass", (LPCTSTR) sDefaultDocClass);
			if (FAILED(hr))
			{
				return hr;
			}
			
			hr = PopulateContextItems(pContextItems, L"IManExt.Import.DocSubclass", (LPCTSTR) CIManageUtils::GetSubClassName(pDatabase, sDefaultDocClass));
			if (FAILED(hr))
			{
				return hr;
			}
			
			if ((pBaseDocument == NULL) && !m_sBaseFolderPath.IsEmpty())
			{
				PopulateContextItems(pContextItems, L"IManExt2.DefaultLocation", m_sBaseFolderPath.c_str());
			}
		}

		CSDSafeArray SDSafeArray;
		long lVectorIndex = CreateFileTypesSafeArray(sFormatString, SDSafeArray, lFormatIndex);

		hr = PopulateContextItems(pContextItems, L"IManExt.SaveAsOptionCmd.SaveAsTypesArray", SDSafeArray.AsVariant());
		if (FAILED(hr))
		{
			return hr;
		}	
		PopulateContextItems(pContextItems, L"IManExt.SaveAsOptionCmd.SaveAsTypesIndex", lVectorIndex - 1L);
	}
	catch(_com_error& e)
	{
		CStdString sErr;
		sErr.Format(_T("Error %s. File description: %s."), e.ErrorMessage(), sDescription.c_str());
		LOG_WS_ERROR(sErr.c_str());
		return e.Error();
	}			
	return hr;
//	Set objCommand = New IMANEXTLib.ImportCmd
//Set objContextItems = New IMANEXTLib.contextItems
//objContextItems.Add "IManDestinationObject", db
//objContextItems.Add "IManExt.Import.FileName", importPath
//objContextItems.Add "IManExt.Import.DocAuthor", "jholehouse"
//objContextItems.Add "IManExt.Import.DocOperator", sess.UserID
//objContextItems.Add "IManExt.Import.DocDescription", importPath
//objContextItems.Add "IManExt.Import.DocClass", "Delete"
//objContextItems.Add "IManExt.Import.Custom2", "L10638"
//objContextItems.Add "IManExt.Import.DocType", "WORD"
//objContextItems.Add "IManExt.Import.Comment", "this is a test"
//objContextItems.Add "IManExt.Import.InheritSecurity", True
}
示例#28
1
HRESULT STDMETHODCALLTYPE BrowserEvents2::Invoke(
        /* [in] */ DISPID dispId,
        /* [in] */ REFIID riid,
        /* [in] */ LCID lcid,
        /* [in] */ WORD wFlags,
        /* [out][in] */ DISPPARAMS *pDispParams,
        /* [out] */ VARIANT *pVarResult,
        /* [out] */ EXCEPINFO *pExcepInfo,
        /* [out] */ UINT *puArgErr) {

    // When returning a result, you must check whether pVarResult
    // is not NULL and initialize it using VariantInit(). If it's
    // NULL then it doesn't expect a result.
    if (riid != IID_NULL)
        return DISP_E_UNKNOWNINTERFACE;
    pExcepInfo = 0;
    puArgErr = 0;
    HRESULT hr;
    json_value* settings = GetApplicationSettings();

    if (dispId == DISPID_NEWWINDOW3) {
        /* When calling window.open() you get an error "Class
           not registered". Before this error appears
           DWebBrowserEvents2::NewWindow3 event is dispatched,
           you need to create the popup window in this event
           and assign the dispatch interface of the new popup
           browser to the first parameter of NewWindow3. */
        LOG_DEBUG << "BrowserEvents2::NewWindow3()";
        if (pDispParams->cArgs != 5) {
            LOG_WARNING << "BrowserEvents2::NewWindow3() failed: "
                    "Expected 5 arguments";
            _ASSERT(false);
            return DISP_E_BADPARAMCOUNT;
        }
        // ppDisp
        _ASSERT(pDispParams->rgvarg[4].vt == (VT_DISPATCH | VT_BYREF));
        // Cancel
        _ASSERT(pDispParams->rgvarg[3].vt == (VT_BOOL | VT_BYREF));
        // dwFlags
        _ASSERT(pDispParams->rgvarg[2].vt == VT_I4);
        // bstrUrlContext
        _ASSERT(pDispParams->rgvarg[1].vt == VT_BSTR);
        // bstrUrl
        _ASSERT(pDispParams->rgvarg[0].vt == VT_BSTR);

        HWND popupHandle = CreatePopupWindow(
                browserWindow_->GetWindowHandle());
        _ASSERT(popupHandle);
        BrowserWindow* browserWindow = GetBrowserWindow(popupHandle);
        if (!browserWindow) {
            LOG_WARNING << "BrowserEvents2::NewWindow3() failed: "
                           "CreatePopupWindow() failed";
            // Cancel parameter. Current navigation should be cancelled.
            *pDispParams->rgvarg[3].pboolVal = VARIANT_TRUE;
            return S_OK;
        }
        const IWebBrowser2Ptr webBrowser2 = browserWindow->GetWebBrowser2();
        IDispatchPtr dispatch;
        hr = webBrowser2->get_Application(&dispatch);
        if (FAILED(hr) || !dispatch) {
            LOG_WARNING << "BrowserEvents2::NewWindow3() failed: "
                           "webBrowser2->get_Application() failed";
            return S_OK;
        }

        *pDispParams->rgvarg[4].ppdispVal = dispatch.Detach();
        *pDispParams->rgvarg[3].pboolVal = VARIANT_FALSE;

        // Following events (DWebBrowserEvents2) will appear
        // after popup creation, they inform about "features"
        // passed to "window.open", such as width, height and others:
        // DISPID_ONTOOLBAR
        // DISPID_ONADDRESSBAR
        // DISPID_WINDOWSETRESIZABLE
        // DISPID_ONMENUBAR
        // DISPID_ONSTATUSBAR
        // DISPID_ONFULLSCREEN
        // DISPID_CLIENTTOHOSTWINDOW
        // DISPID_WINDOWSETWIDTH
        // DISPID_WINDOWSETHEIGHT
        // DISPID_WINDOWSETTOP
        // DISPID_WINDOWSETLEFT
        // DISPID_NAVIGATECOMPLETE2
        return S_OK;
    } else if (dispId == DISPID_WINDOWSETWIDTH) {
        _ASSERT(pDispParams->cArgs == 1);
        _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nWidth
        long width = pDispParams->rgvarg[0].lVal;
        // LOG_DEBUG << "BrowserEvents2::WindowSetWidth(): width = "
        //           << width;
        browserWindow_->SetWidth(width);
    } else if (dispId == DISPID_WINDOWSETHEIGHT) {
        _ASSERT(pDispParams->cArgs == 1);
        _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nHeight
        long height = pDispParams->rgvarg[0].lVal;
        // LOG_DEBUG << "BrowserEvents2::WindowSetHeight(): height = "
        //           << height;
        browserWindow_->SetHeight(height);
    } else if (dispId == DISPID_WINDOWSETTOP) {
        _ASSERT(pDispParams->cArgs == 1);
        _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nTop
        long top = pDispParams->rgvarg[0].lVal;
        // LOG_DEBUG << "BrowserEvents2::WindowSetTop(): top = "
        //           << top;
        browserWindow_->SetTop(top);
    } else if (dispId == DISPID_WINDOWSETLEFT) {
        _ASSERT(pDispParams->cArgs == 1);
        _ASSERT(pDispParams->rgvarg[0].vt == VT_I4); // nLeft
        long left = pDispParams->rgvarg[0].lVal;
        // LOG_DEBUG << "BrowserEvents2::WindowSetLeft(): left = "
        //           << left;
        browserWindow_->SetLeft(left);
    } else if (dispId == DISPID_TITLECHANGE) {
        if (browserWindow_->IsPopup()
                && browserWindow_->IsUsingMetaTitle()) {
            _ASSERT(pDispParams->cArgs == 1);
            _ASSERT(pDispParams->rgvarg[0].vt == VT_BSTR); // Text
            BSTR title = pDispParams->rgvarg[0].bstrVal;
            // LOG_DEBUG << "BrowserEvents2::TitleChange(): "
            //              "setting popup title = " << WideToUtf8(title);
            browserWindow_->SetTitle(title);
        }
    } else if (dispId == DISPID_NAVIGATEERROR) {
        LOG_DEBUG << "BrowserEvents2::NavigateError()";
        if (pDispParams->cArgs != 5) {
            LOG_WARNING << "BrowserEvents2::NavigateError() failed: "
                    "Expected 5 arguments";
            _ASSERT(false);
            return DISP_E_BADPARAMCOUNT;
        }
        // pDisp
        _ASSERT(pDispParams->rgvarg[4].vt == VT_DISPATCH);
        // URL
        _ASSERT(pDispParams->rgvarg[3].vt == (VT_VARIANT | VT_BYREF));
        _ASSERT(pDispParams->rgvarg[3].pvarVal->vt == VT_BSTR);
        // TargetFrameName
        _ASSERT(pDispParams->rgvarg[2].vt == (VT_VARIANT | VT_BYREF));
        _ASSERT(pDispParams->rgvarg[2].pvarVal->vt == VT_BSTR);
        // StatusCode
        _ASSERT(pDispParams->rgvarg[1].vt == (VT_VARIANT | VT_BYREF));
        _ASSERT(pDispParams->rgvarg[1].pvarVal->vt == VT_I4);
        // Cancel
        _ASSERT(pDispParams->rgvarg[0].vt == (VT_BOOL | VT_BYREF));

        const wchar_t* navigateUrl = pDispParams->rgvarg[3].pvarVal->bstrVal;
        int statusCode = pDispParams->rgvarg[1].pvarVal->lVal;

        if (browserWindow_->DisplayErrorPage(navigateUrl, statusCode)) {
            *pDispParams->rgvarg[0].pboolVal = VARIANT_TRUE;
            return S_OK;
        } else {
            *pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE;
            return S_OK;
        }
    } else if (dispId == DISPID_WINDOWCLOSING) {
        // Seems like this event is never being called, it should be
        // called when executing "window.close()", but it's not.
        // Use WM_PARENTNOTIFY instead to be notified when window is closing.
        LOG_DEBUG << "BrowserEvents2::WindowClosing()";
        return S_OK;
        /*
        if (pDispParams->cArgs != 2) {
            LOG_WARNING << "BrowserEvents2::WindowClosing() failed: "
                    "Expected 2 arguments";
            _ASSERT(false);
            return DISP_E_BADPARAMCOUNT;
        }
        // bIsChildWindow
        _ASSERT(pDispParams->rgvarg[1].vt == VT_BOOL);
        // Cancel
        _ASSERT(pDispParams->rgvarg[0].vt == (VT_BOOL | VT_BYREF));

        // VARIANT_FALSE - window is allowed to close..
        *pDispParams->rgvarg[0].pboolVal = VARIANT_FALSE;
        return S_OK;
        */
    }
    return S_OK;
}
示例#29
1
STDMETHODIMP COutlookButton::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
	if (IID_NULL != riid)
        return DISP_E_UNKNOWNINTERFACE;

	// The only dispID supported is 1, which triggers when the "button" is clicked
    if (dispIdMember != 0x00000001)
        return DISP_E_MEMBERNOTFOUND;

    if (NULL == pDispParams) 
		return E_POINTER;
    if (pDispParams->cArgs != 2) 
		return DISP_E_BADPARAMCOUNT;

	/*CMAPIEx mapi;
	if(!CMAPIEx::Init() || !mapi.Login("Outlook") || !mapi.OpenMessageStore("")) {
		MessageBox(NULL, "Failed to initialize MAPI", "Error", MB_OK);
		return S_OK;
	}

	MessageBox(NULL, mapi.GetProfileName(), "Test", MB_OK);*/

	// you can use this profile name as an argument for Login() when no MAPI provider is open (ie Outlook)
	//printf("Profile Name: %s\n",mapi.GetProfileName());

	

	try {
		if( pDispParams->rgvarg[1].vt == VT_DISPATCH ) 
		{
			//OutlookSecurity::SecurityManager
			
			//OutlookSecurity::SecurityManager sec;
			
			Outlook::_ExplorerPtr spExplorer = m_OLAppPtr->ActiveExplorer();
            _ContactItemPtr pContactItem = NULL;
			CString fullName="";

			if (spExplorer!=NULL) {			
				Outlook::_NameSpacePtr nameSpace = m_OLAppPtr->GetNamespace("MAPI");
				Outlook::MAPIFolderPtr currFolder = spExplorer->CurrentFolder;
				HRESULT hr;
				
				enum Outlook::OlItemType olt;
				hr = currFolder->get_DefaultItemType(&olt);
				if (!FAILED(hr)) {
					if (olt==(Outlook::OlItemType)2) {												
						IDispatchPtr pContact = GetSelectedItem(spExplorer);
						if (pContact!=NULL) {
							pContactItem = (Outlook::_ContactItemPtr)pContact;
							fullName = (LPCTSTR)pContactItem->GetFullName();							
						}					
					} else if (olt==(Outlook::OlItemType)0) {						
						Outlook::MAPIFolderPtr pParentFolder = (Outlook::MAPIFolderPtr)currFolder->GetParent();

						if (pParentFolder!=NULL) {
							IDispatchPtr pSelectedItem = GetSelectedItem(spExplorer);
							Outlook::_MailItemPtr pMailItem;
							//Outlook::_ContactItemPtr pContactItem;												
							Outlook::MAPIFolderPtr pTemp, pTemp2;
							BOOL itemType = 0; // 0-other, 1-mail, 2-contact

							if (pSelectedItem!=NULL) {
								HRESULT hr = pSelectedItem->QueryInterface(&pMailItem);

								if (FAILED(hr)) {
									hr = pSelectedItem->QueryInterface(&pContactItem);
									if (!FAILED(hr))
										itemType = 2;							
								} else {
									itemType = 1;
								}

								if (itemType==1) { //mail item
									if ((pTemp=pParentFolder->GetParent())==NULL) {						
										pParentFolder = currFolder;
									} else {										
										while (1) {
											pTemp=(Outlook::MAPIFolderPtr)pParentFolder->GetParent();
											
											if ((pTemp2=pTemp->GetParent())!=NULL)
												pParentFolder=pTemp;
											else
												break;
										}
									}
																		
									if ((pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderOutbox)->GetName()) ||
										(pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderSentMail)->GetName()) ||
										(pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderDrafts)->GetName())) {
											fullName = (LPCTSTR)pMailItem->GetTo();
									} else if (pParentFolder->GetName()==nameSpace->GetDefaultFolder(Outlook::olFolderInbox)->GetName()) {										
										fullName = (LPCTSTR)pMailItem->GetSenderName();
									} else {
										fullName = (LPCTSTR)pMailItem->GetSenderName();										
										/*fullName += "#####";
										fullName += (LPCTSTR)pMailItem->GetTo();*/
									}
									pContactItem = FindContact(CString(CString("[FullName] = '") + fullName + "'").AllocSysString());
								} else if (itemType==2) { //contact item
									fullName = (LPCTSTR)pContactItem->GetFullName();									                                    
								}
							}							
						}
					}				
				}
			}

			CString numbers;			
			CString strTemp;
			if (pContactItem) {
                strTemp = (LPCTSTR)pContactItem->GetAssistantTelephoneNumber();
				if (strTemp!="")
					numbers += "Assistant:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetBusinessTelephoneNumber();				
				if (strTemp!="")
					numbers += "Business:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetBusiness2TelephoneNumber();					
				if (strTemp!="")
					numbers += "Business2:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetBusinessFaxNumber();					
				if (strTemp!="")
					numbers += "Business Fax:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetCallbackTelephoneNumber();					
				if (strTemp!="")
					numbers += "Callback:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetCarTelephoneNumber();					
				if (strTemp!="")
					numbers += "Car:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetCompanyMainTelephoneNumber();
				if (strTemp!="")
					numbers += "Company Main:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetHomeTelephoneNumber();					
				if (strTemp!="")
					numbers += "Home:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetHome2TelephoneNumber();					
				if (strTemp!="")
					numbers += "Home2:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetHomeFaxNumber();
				if (strTemp!="")
					numbers += "Home Fax:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetISDNNumber();
				if (strTemp!="")
					numbers += "ISDN:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetMobileTelephoneNumber();					
				if (strTemp!="")
					numbers += "Mobile:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetOtherTelephoneNumber();					
				if (strTemp!="")
					numbers += "Other:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetOtherFaxNumber();
				if (strTemp!="")
					numbers += "Other Fax:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetPagerNumber();
				if (strTemp!="")
					numbers += "Pager:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetPrimaryTelephoneNumber();					
				if (strTemp!="")
					numbers += "Primary:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetRadioTelephoneNumber();
				if (strTemp!="")
					numbers += "Radio:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetTelexNumber();
				if (strTemp!="")
					numbers += "Telex:" + strTemp + " | ";

				strTemp = (LPCTSTR)pContactItem->GetTTYTDDTelephoneNumber();
				if (strTemp!="")
					numbers += "TTY/TDD:" + strTemp + " | ";
			}

			// We can now get at the "button" which triggered this event.
			LPDISPATCH pButton = pDispParams->rgvarg[1].pdispVal;
			
			CString strWindowTitle = "BSOC Main Application Window";
			CString strDataToSend;
			
			if (fullName=="") {
				strDataToSend = _T("Dial");
			} else {
				CString ContactName;
				if (pContactItem) {
                    ContactName = CString((LPCTSTR)pContactItem->GetFirstName()) + " | " + 
					CString((LPCTSTR)pContactItem->GetMiddleName()) + " | " +
					CString((LPCTSTR)pContactItem->GetLastName());
				} else {
                    ContactName = fullName;
				}
				strDataToSend = _T("Dial#####" + ContactName + "#####" + numbers);				
			}

	    
			LRESULT copyDataResult;			
			CWnd *pOtherWnd = CWnd::FindWindow(NULL, strWindowTitle);

			if (pOtherWnd)
			{
				COPYDATASTRUCT cpd;
				cpd.dwData = 0;
				cpd.cbData = strDataToSend.GetLength();
				cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
				copyDataResult = pOtherWnd->SendMessage(WM_COPYDATA,
														(WPARAM)NULL,
														(LPARAM)&cpd);				
				// copyDataResult has value returned by other app				
			} 
			else 
			{
				AfxMessageBox(CString(APP_NAME) + " is not running.");
			}	

		}
	} catch (...) { }

	/*mapi.Logout();
	CMAPIEx::Term();*/

    return S_OK;
}
示例#30
1
BOOL CAutoUpdateDlg::CheckVersionUpdate(CString& strUpdateURL)
{
	BOOL bHasUpdate = FALSE;

	HRESULT hr = S_OK;
	IXMLHTTPRequestPtr pHttpRequest;
	IDispatchPtr pDispatch;
	MSXML2::IXMLDOMDocumentPtr pXmlDoc;
	MSXML2::IXMLDOMNodeListPtr pList;
	MSXML2::IXMLDOMElementPtr pChild;

	UINT nFileSize;
	CString strFileName, strFileVer, strMD5String;
	LONG lElementCount = 0L;

	try
	{
		hr = pHttpRequest.CreateInstance(TEXT("Msxml2.XMLHTTP.3.0"));
		if( FAILED(hr) )
			_com_issue_error(hr);

		hr = pHttpRequest->open(TEXT("GET"), (_bstr_t)strUpdateURL, false);
		if( FAILED(hr) )
			_com_issue_error(hr);

		hr = pHttpRequest->send();
		if( FAILED(hr) )
			_com_issue_error(hr);

		if (pHttpRequest->Getstatus() != 200)
			throw (0);

		pDispatch = pHttpRequest->GetresponseXML();
		hr = pDispatch->QueryInterface(pXmlDoc.GetIID(), (void**)&pXmlDoc);
		if( FAILED(hr) )
			_com_issue_error(hr);

		pList = pXmlDoc->selectNodes("/manifest/filelist/file");
		lElementCount = pList->Getlength();
		for( LONG i = 0; i < lElementCount; i++ )
		{
			pChild = pList->Getitem(i);
			strFileName = pChild->getAttribute("filename");
			nFileSize = pChild->getAttribute("filesize");
			strFileVer = pChild->getAttribute("fileversion");
			strMD5String = pChild->getAttribute("md5");

			//如果本地文件存在则效验文件,不存在就下载这个文件
			if (PathFileExists(m_strCurrentDir+strFileName))
			{
				//效验文件,如果MD5码不相同则重新下载
				if (CMD5Checksum::GetMD5(m_strCurrentDir+strFileName) != strMD5String)
				{
					m_ulTotalLength += nFileSize;
					m_DownloadMgr.AddTask(strFileName);
					bHasUpdate = TRUE;
				}	
			}
			else
			{
				m_ulTotalLength += nFileSize;
				m_DownloadMgr.AddTask(strFileName);
				bHasUpdate = TRUE;
			}
		}

		return bHasUpdate;
	}
#ifdef _DEBUG
	catch(_com_error& e)
	{
		CString strError;
		strError.Format(_T("Error code:%d\nMessage:%s\nDescrption:%s"), (int)e.WCode(), e.ErrorMessage(), (TCHAR*)e.Description());
		MessageBox(strError, _T("提示"), MB_OK|MB_ICONWARNING);
		return FALSE;
	}
#endif
	catch(...)
	{
		return FALSE;
	}
}