/* 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; }
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; }
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; }
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 }
LPUNKNOWN CMSMQEventHandler::GetInterfaceHook(const void* piid) { if (IsEqualIID(__uuidof(_DMSMQEventEvents), *(IID*)piid)) { return GetIDispatch(FALSE); } else { return NULL; } }
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; }
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 }
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); }
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; }
HRESULT CefJamMFCHtmlView::OnGetExternal(LPDISPATCH *lppDispatch) { *lppDispatch = GetIDispatch(TRUE); return S_OK; }