示例#1
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;
}
示例#2
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;
}
示例#3
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;
}
HRESULT fsShellBrowsersEvents::Attach(SHDocVw::IWebBrowser2Ptr& spBrowser)
{
	if (m_bDetaching)
		return S_FALSE;

	IConnectionPointContainerPtr spConnPtContr;
	HRESULT hr;

	

	hr = spBrowser->QueryInterface (IID_IConnectionPointContainer, (LPVOID*) &spConnPtContr);
	if (FAILED (hr))
		return hr;

	hr = spConnPtContr->FindConnectionPoint (__uuidof (SHDocVw::DWebBrowserEvents2), &m_spConnPt);
	if (FAILED (hr))
		return hr;

	hr = m_spConnPt->Advise (GetIDispatch (FALSE), &m_dwCookie);

	if (SUCCEEDED (hr))
		m_spWB = spBrowser;

	return hr;
}
示例#5
0
void CBoxHttpHost::CallEvent(LPCWSTR strEvent, CBoxHttpContext *pContext, CBoxHttpSession *pSession, BOOL bAddHost)
{
	CBoxObject<CBoxScriptObject> pScriptObject;
	CBoxObject<CBoxHttpContext> pNullContext;
	CComDispatchDriver pDisp;

	pScriptObject.CreateInstance();
	if(pScriptObject->Load(m_strEventSink) != 0)
		return;

	if(pContext)pContext->Bind(NULL, pScriptObject);
	else
	{
		pNullContext.CreateInstance();
		pNullContext->m_strBasePath = m_strRoot;
		pScriptObject->AddNameItem(_T("Server"), pNullContext->GetIDispatch(FALSE));
		pScriptObject->AddNameItem(_T("Application"), m_pApplication);
	}
	if(pSession)pScriptObject->AddNameItem(_T("Session"), pSession->GetIDispatch(FALSE));
	if(bAddHost)pScriptObject->AddNameItem(_T("Host"), GetIDispatch(FALSE));

	if(pScriptObject->Init() != 0)
		return;

	pDisp.Attach(pScriptObject->get_Object());

	if(pDisp)
	{
		pDisp.Invoke0(strEvent);
		theApp.m_pSystem->ClearLock();
	}
}
// C/C++ Interface
HRESULT CoAuthServiceCall::Init(LPCTSTR szMethod, LPCTSTR szUrl)
{
	_ASSERT(NULL == m_spRequest); // initalize only once
	m_spRequest.CreateInstance(XMLHTTP_COMPONENT);

	// add sink to xml http request
	const DWORD dwRef = CCmdTarget::m_dwRef;
	HRESULT hr = m_spRequest->put_onreadystatechange(GetIDispatch(FALSE));
	_ASSERT(SUCCEEDED(hr) && (dwRef + 1 == CCmdTarget::m_dwRef));

	m_eState = InitialRequest;
	m_pRenewTokenAsync = NULL;
	m_bstrMethod = szMethod;
	m_bstrUrl = szUrl;
	TRACE2("  %s: %s (first trial)\n", szMethod, szUrl);

/*
* hier laeuft schon der erste (synchrone) Callback (OnReadStateChange(READYSTATE_LOADING))
* ungluecklicherweise koennen wir fuer den fall das der IWorkflow::AuthorizeRequest() failed KEINEN returnwert/exception liefern
* ergo wird das IXMLHTTPRequest::send() unbedingt nachgeschoben. das heist wir muessen spaeter evtl. auf den falschen fehler 401 reagieren.
*/
	CComVariant varAsync(VARIANT_TRUE);
	m_spRequest->open(m_bstrMethod, m_bstrUrl, varAsync);
#ifdef AUTHORIZATION_SERVER_SUPPORT_JSON
	m_spRequest->setRequestHeader(L"Accept", L"application/json");
	// m_spRequest->setRequestHeader(L"Accept", L"application/json,application/xml");
#else

	m_spRequest->setRequestHeader(L"Accept", L"application/xml");
#endif
	m_spRequest->send();
	return VARIANT_TRUE == V_BOOL(&varAsync) ? E_PENDING : NOERROR;
}
BOOL CAddVideoHtmlDlg::OnInitDialog()
{
	CDHtmlDialog::OnInitDialog();

	SetIcon(LoadIcon(theApp.m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME)), FALSE);
	SetExternalDispatch(GetIDispatch(TRUE));

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
示例#8
0
LPUNKNOWN CMSMQEventHandler::GetInterfaceHook(const void* piid)
{
	if (IsEqualIID(__uuidof(_DMSMQEventEvents), *(IID*)piid))
	{
		return GetIDispatch(FALSE);
	}
	else
	{
		return NULL;
	}
}
示例#9
0
void CBoxScriptContext::Start(long sc)
{
	CComPtr<CScriptHost> pHost;

	pHost = CScriptHost::GetCurrentScript();
	m_pTranspHost = CScriptHost::GetTransScript();
	if(pHost != NULL)
	{
		pHost->AddNameItem(_T("ObjectContext"), GetIDispatch(FALSE));
		pHost->SetScriptState((SCRIPTSTATE)sc);
	}
}
// CoAuthRenewTokenAsync message handlers
HRESULT CoAuthRenewTokenAsync::Init(oAuthLib::IAuthorize* pAuthorize, oAuthLib::IRenewCallback* pRenewCallback)
{
	ASSERT(NULL == m_spRequest); // initalize only once
	ASSERT(NULL == m_spRenewCallback);
	ASSERT(NULL != pRenewCallback);
	if (NULL == pRenewCallback)
		return E_INVALIDARG;

	HRESULT hrRet = E_FAIL;
	try
	{
		m_spAuthorize = pAuthorize;
		IUnknownPtr spReq;
		CComVariant varBody;

		/*
		* per definition IAuthorize::LockForRenew() liefern wir E_PENDING
		* ergo koennen wir das ExceptionHandling fuer den IAuthorize SmartPtr
		* in diesem SPEZIELLEN fall NICHT brauchen
		*/
		const HRESULT _hr = m_spAuthorize->raw_LockForRenew(pRenewCallback, &spReq, &varBody); // wir koennen CTokenFile gleich ein xmlhttpreq object bauen lassen
		if (E_PENDING == _hr)
		{
			m_spRenewCallback = pRenewCallback;
			m_spRequest = spReq;

			// add sink to xml http request
			m_spRequest->put_onreadystatechange(GetIDispatch(FALSE));

			return m_spRequest->send(varBody);
		}

		else if (NOERROR == _hr)
		{
			// nothing to do. no references stored the object will be destroyed as soon as possible
			return NOERROR;
		}

		hrRet = _hr;
	}
	catch (const _com_error& e)
	{
		hrRet = e.Error(); // resource not found, whatever ...
	}

	// es ist was schiefgegangen wir canceln den request manuell/sofort
	pRenewCallback->Terminate();
	return hrRet;
}
示例#11
0
BOOL CPluginsDialog::OnInitDialog()
{
	CDHtmlDialog::OnInitDialog();

	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
	

	EnableAutomation();
	SetExternalDispatch(GetIDispatch(TRUE));

	//註冊 命令算法
	_strategys.push_back(boost::make_shared<strategy_window>(this));
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
示例#12
0
HRESULT CMSMQEventHandler::AdviseSource(IDispatch* pDispatch)
{
	LPCONNECTIONPOINTCONTAINER	pCPCont = NULL;
	HRESULT						hr;

	hr = pDispatch->QueryInterface(IID_IConnectionPointContainer, (void**) &pCPCont);
	if (FAILED(hr))
		return hr;

	hr = pCPCont->FindConnectionPoint(__uuidof(_DMSMQEventEvents), &m_pMyCP);
	pCPCont->Release();
	if (FAILED(hr))
		return hr;

	return m_pMyCP->Advise(GetIDispatch(TRUE), &m_dwMyCookie);
};
HRESULT CDownloads_Opinions_WBEvents::Attach()
{
	IConnectionPointContainerPtr spCPC;

	LPUNKNOWN pUnk = m_pwndOpinions->m_wb.GetControlUnknown ();
	if (pUnk == NULL)
		return E_FAIL;

	spCPC = pUnk;
	if (spCPC == NULL)
		return E_FAIL;

	spCPC->FindConnectionPoint (DIID_DWebBrowserEvents2, &m_spCP);
	if (m_spCP == NULL)
		return E_FAIL;

	return m_spCP->Advise (GetIDispatch (FALSE), &m_dwCookie);
}
示例#14
0
INT CMainWnd::OnDataArrival(INT nAppId, INT nMsg, INT nParam1, INT nParam2, LPVOID lpBuf, size_t cbLen)
{
	if (1 == nMsg)
	{
		Tips_ShowParam tips_ShowParam = {0};
		tips_ShowParam.length = sizeof Tips_ShowParam;
		tips_ShowParam.nDelayDisappearTime = 10;

		ITipsShow *pTipsShow = CreateTipsShowObject();
		pTipsShow->SetShowParam(tips_ShowParam);
		pTipsShow->SetExternal(GetIDispatch(TRUE));


		TCHAR szURL[1024] = {0};
		memcpy(szURL, lpBuf, cbLen);
		pTipsShow->ShowTips(szURL);

		//pTipsShow->ShowTips(str, "<a href=\"javascript:window.external.GetHostApp().TipsNotify(1);\">显示!</a><a href=\"javascript:window.external.Close();\">关闭!</a>");

		delete pTipsShow;
	}

	return 0;
}
示例#15
0
HRESULT CefJamMFCHtmlView::OnGetExternal(LPDISPATCH *lppDispatch)
{
	*lppDispatch = GetIDispatch(TRUE);

	return S_OK;
}