void CView::SavePicture(LPCTSTR szFile) { // get a IPictureDisp interface from your IPicture pointer IPictureDisp *pDisp = NULL; if (SUCCEEDED(m_pPicture->QueryInterface(IID_IPictureDisp, (void**) &pDisp))) { // Save the IPicture image as a bitmap OleSavePictureFile(pDisp, T2BSTR(szFile)); pDisp->Release(); } }
BOOL CMainFrame::Show(HWND hwndParent, ICxScriptEditorSite* pSite, DWORD dwSymbolMask, CString& strText, BOOL& bModified, LPCTSTR lpszObject, LPCTSTR lpszEvent) { USES_CONVERSION; RECT rc = {0, 0, 640, 480}; if (CreateEx(hwndParent, &rc, WS_POPUP|WS_CAPTION|WS_SYSMENU| WS_THICKFRAME|WS_MAXIMIZEBOX/*, WS_EX_TOOLWINDOW*/) == NULL) { ATLTRACE(_T("CMainFrame creation failed!\n")); return FALSE; } m_bSave = FALSE; m_bPrompt = FALSE; m_hEvent = CreateEvent(0, 0, 0, 0); ::EnableWindow(hwndParent, false); ModifyStyleEx(WS_EX_APPWINDOW, 0); //使窗口标题不显示在任务条上 CenterWindow(); ShowWindow(SW_SHOW); m_spScriptEditor->SetScriptEditorSite(pSite); m_spScriptEditor->AddGeneralSymbolPage(dwSymbolMask); m_spScriptEditor->put_Text(T2BSTR(strText)); m_spScriptEditor->EditObjectEventHandler(T2BSTR(lpszObject), T2BSTR(lpszEvent), TRUE); m_spScriptEditor->EmptyUndoBuffer(); m_spScriptEditor->SetSavePoint(); CWaitMessageLoop loop; loop.AddMessageFilter(this); loop.AddIdleHandler(this); loop.Run(m_hEvent); BOOL bModify; m_spScriptEditor->GetModify(&bModify); if (m_bPrompt && bModify) { if (MessageBox(_T("脚本改动保存吗?"), _T("询问"), MB_YESNO | MB_ICONQUESTION) == IDYES) m_bSave = TRUE; } if (m_bSave) { m_spScriptEditor->DeleteEmptyEventHandler(); CComBSTR bstr; m_spScriptEditor->get_Text(&bstr); strText = bstr; bModified = TRUE; } ::EnableWindow(hwndParent, true); DestroyWindow(); CloseHandle(m_hEvent); m_hEvent = 0; return TRUE; }
BOOL CPageMesTemplates::SaveSettings() { UpdateData(); WriteOptionInt(IDS_OFSMESSENGER,IDS_SEND_MESSAGE_TEMPLATE_AUTO,m_ShowAuto); CComPtr<IXMLDOMDocument> pMTDoc = NULL; pMTDoc.CoCreateInstance(CLSID_DOMDocument40,NULL,CLSCTX_INPROC_SERVER); if(pMTDoc) { USES_CONVERSION; CComBSTR bsRootXML = L"<message_templates/>"; VARIANT_BOOL varLoad = VARIANT_FALSE; pMTDoc->loadXML(bsRootXML,&varLoad); //------------------------------------------------------------------------------------- CComPtr<IXMLDOMNode> pRoot; pMTDoc->selectSingleNode(L"message_templates",&pRoot); for(int Index = 0; Index<m_TemplateList.GetItemCount();Index++) { CComPtr<IXMLDOMNode> pItem; insertSingleNode(pRoot,CComBSTR(L"mt"),NULL,NULL,&pItem); insertSingleNode(pItem,CComBSTR(L"name"),NULL,T2BSTR(m_TemplateList.GetItemText(Index,0))); insertSingleNode(pItem,CComBSTR(L"text"),NULL,T2BSTR(m_TemplateList.GetItemText(Index,1))); } //------------------------------------------------------------------------------------- CString strSection; strSection.Format(_T("%s\\%s\\%d"),GetString(IDS_INFO),m_UserRole,m_UserId); CComBSTR bsOutXML; pMTDoc->get_xml(&bsOutXML); //------------------------------------------------------------------------------------- CString strMessageTemplateXML = W2CT(bsOutXML); SetRegFileText(strSection,GetString(IDS_MESSAGE_TEMPLATES_REG),strMessageTemplateXML); } return CMcSettingsPage::SaveSettings(); }
STDMETHODIMP CAdRotator::get_TargetFrame(BSTR * pVal) { HRESULT rc = E_FAIL; USES_CONVERSION; try { if ( pVal ) { CLock l(m_cs); if ( *pVal ) { ::SysFreeString( *pVal ); } *pVal = T2BSTR( m_strTargetFrame.c_str() ); THROW_IF_NULL( *pVal ); rc = S_OK; } else { rc = E_POINTER; } } catch ( alloc_err& ) { rc = E_OUTOFMEMORY; } catch ( ... ) { rc = E_FAIL; } return rc; }
void CWebBrowserUI::NavigateUrl( LPCTSTR lpszUrl ) { if (m_pWebBrowser2 && lpszUrl) { m_pWebBrowser2->Navigate((BSTR)SysAllocString(T2BSTR(lpszUrl)),NULL,NULL,NULL,NULL); } }
STDMETHODIMP HttpRequest::get_ResponseFile(BSTR* pVal) { ATLASSERT(pVal); *pVal=NULL; if (m_szResponseFile!=NULL) *pVal=T2BSTR(m_szResponseFile); return S_OK; }
STDMETHODIMP HttpRequest::get_SessionKey(BSTR* pVal) { ATLASSERT(pVal); *pVal=NULL; if (_tcslen(m_szSessionKey)>0) *pVal=T2BSTR(m_szSessionKey); return S_OK; }
STDMETHODIMP HttpRequest::get_Method(BSTR* pVal) { ATLASSERT(pVal); *pVal=NULL; if (m_szMethod!=NULL) *pVal=T2BSTR(m_szMethod); return S_OK; }
void BrowserControlPane::NavigateTo(LPCTSTR isURL) { if (this->pBrowser != NULL) { BSTR sURL; CComVariant postData; sURL = T2BSTR(isURL); postData.vt = VT_ARRAY; postData.parray = ::SafeArrayCreate(VT_UI1, 0, NULL); try { VARIANT t; t.vt = VT_I4; t.iVal = 0; t.iVal |= navNoWriteToCache; this->pBrowser->Navigate(sURL, &CComVariant(navNoHistory, VT_I4), &CComVariant((BSTR)NULL), &postData, &CComVariant((BSTR)NULL)); ::SafeArrayDestroy(postData.parray); ::SysFreeString(sURL); } catch (...) { this->Dispose(); } } }
// HttpRequest STDMETHODIMP HttpRequest::get_Url(BSTR* pVal) { ATLASSERT(pVal); *pVal=NULL; if (_tcslen(m_szUrl)>0) *pVal=T2BSTR(m_szUrl); return S_OK; }
// Read the specified data file and add to the data store. // 27-Oct-2004 SFK Added db open, if needed. If successful, facility-specific database is open. STDMETHODIMP CVifmImport::AddData( short sFacilityID, BSTR bstrFilename, VARIANT_BOOL bOverwrite, BSTR *bstrResult, VARIANT_BOOL *pvbResult) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) USES_CONVERSION; *pvbResult = VARIANT_FALSE; CString strResult; CVifmDataFile File(false);//m_bQuietMode); File.mbOverwrite = (bOverwrite != VARIANT_FALSE); if (!Db.mbDatabaseOpen) Db.OpenTheDatabase(sFacilityID); if (Db.mbDatabaseOpen) { Db.msFacNum = sFacilityID; CString cs(bstrFilename); bool b = File.ReadDataFile(&Db, cs, &strResult); *pvbResult = b?VARIANT_TRUE:VARIANT_FALSE; } else { strResult = "Could not open database for VIFM Import"; } *bstrResult = T2BSTR(LPCSTR(strResult)); Db.CloseDatabase(); // 12-Jan-2005 Close db after each action to allow 2 programs to use the COM return S_OK; }
HRESULT STDMETHODCALLTYPE CGlobalsX::get_ReplaceMRUList( BSTR __RPC_FAR *pstrMRUList ) { LPTSTR psz = new TCHAR[ CM_FIND_REPLACE_MRU_BUFF_SIZE + 1 ]; CMGetFindReplaceMRUList( psz, FALSE ); *pstrMRUList = T2BSTR( psz ); delete [] psz; return S_OK; }
STDMETHODIMP CMixerControl::get_name(BSTR *pVal) { if(!pVal) return E_POINTER; *pVal = T2BSTR(m_mc.szName); return S_OK; }
STDMETHODIMP CMixerControl::GetText(long id, BSTR *pVal) { if(!pVal) return E_POINTER; if(!(m_mc.fdwControl & MIXERCONTROL_CONTROLF_MULTIPLE)) return MIX_E_WRONGTYPE; if((id < 0) || (id >= (long)m_mc.cMultipleItems)) return E_INVALIDARG; *pVal = T2BSTR(m_pStrings[id].szName); return S_OK; }
void DuiLib::CWebBrowserUI::Navigate2( LPCTSTR lpszUrl ) { if (lpszUrl == NULL) return; if (m_pWebBrowser2) { VARIANT v; v.vt=VT_BSTR; v.bstrVal=T2BSTR(lpszUrl); HRESULT hr = m_pWebBrowser2->Navigate2(&v, NULL, NULL, NULL, NULL); } }
void CWebBrowserUI::Navigate2( LPCTSTR lpszUrl ) { if (lpszUrl == NULL) return; if (m_pWebBrowser2) { CVariant url; url.vt=VT_BSTR; url.bstrVal=T2BSTR(lpszUrl); HRESULT hr = m_pWebBrowser2->Navigate2(&url, NULL, NULL, NULL, NULL); } }
STDMETHODIMP UNIDProvider::ProvideUNID(BSTR* szUNID) { *szUNID=NULL; BSTR guid=NULL; if (ProvideGUID(&guid)==S_OK){ TCHAR *szGuid=OLE2T(guid); TCHAR szUnid[33]={0}; int j=0; for (int i=1;i<37;i++){ if (i!=9 && i!=14 && i!=19 && i!=24) szUnid[j++]=szGuid[i]; } *szUNID=T2BSTR(szUnid); } return S_OK; }
// GetItemText -------------------------------------------------------------- STDMETHODIMP CICodeList::GetItemText( long ItemIndex, BSTR* pstrVal ) { ASSERT( m_pCtrl != NULL && ::IsWindow( m_pCtrl->m_hWnd ) ); if( !::IsWindow( m_pCtrl->GetSafeHwnd() ) ) return E_POINTER; CHECK_PTR( pstrVal ); int iLen = m_pCtrl->GetItemText( ItemIndex, NULL, 0 ); LPTSTR pszText = new TCHAR[ iLen + 1 ]; if( NULL == pszText ) return E_OUTOFMEMORY; ZeroMemory( pszText, sizeof(TCHAR) * (iLen + 1) ); m_pCtrl->GetItemText( ItemIndex, pszText, iLen ); USES_CONVERSION; *pstrVal = T2BSTR( pszText ); delete [] pszText; return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_TerminatorChar(BSTR __RPC_FAR *pstrVal) { TCHAR sz[ 2 ] = { m_cmLang.chTerminator, _T('\0') }; *pstrVal = T2BSTR( sz ); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_StringDelims(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszStringDelims ? m_cmLang.pszStringDelims : "" ); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_ScopeKeywords2(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszScopeKeywords2 ? m_cmLang.pszScopeKeywords2 : "" ); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_MultiLineComments2(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszMultiLineComments2 ? m_cmLang.pszMultiLineComments2 : "" ); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_SingleLineComments(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszSingleLineComments ? m_cmLang.pszSingleLineComments : "" ); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_Operators(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszOperators ? m_cmLang.pszOperators : "" ); return S_OK; }
STDMETHODIMP HttpRequest::Send(IHttpResponse** pVal) { HRESULT hr=S_OK; ATLASSERT(pVal); (*pVal)=NULL; if(!this->m_szUrl || _tcslen(this->m_szUrl)==0) { InfoMsgBox(_T("请先指定请求的目标URL地址!")); return hr; } //显示进度 rcContext.hOpen=this->m_hOpen; rcContext.dwPostFileLength=0; rcContext.dwPostedLength=0; rcContext.dwContentLength=0; rcContext.dwReceivedLength=0; if (this->m_blShowRequestProgress){ ZeroMemory(rcContext.szMemo,sizeof(rcContext.szMemo));//STRLEN_DEFAULT); _tcscpy_s(rcContext.szMemo,_T("请稍候,正在准备连接...")); rcContext.hThread=CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)ProgressDialog,0,0,&(rcContext.dwThreadID)); } //请求方法 TCHAR szUrl[STRLEN_4K]={0}; _tcscpy_s(szUrl,m_szUrl); TCHAR szMethod[STRLEN_SMALL]=_T("POST"); if(this->m_szMethod && _tcslen(this->m_szMethod)>0){ ZeroMemory(szMethod,sizeof(szMethod)); _tcscpy_s(szMethod,m_szMethod); } //±äÁ¿¶¨Òå DWORD dwError=0; DWORD dwFlags=0; HINTERNET hConnect=0; //Internet»á»° HINTERNET hRequest=0; //InternetÁ¬½Ó INTERNET_PORT dwPort; BOOL postFileFlag=FALSE; //ÊÇ·ñÓÐÓÐЧµÄÌá½»Îļþ¡£ HANDLE hPostFile=0; DWORD dwPostFileSize=0; BOOL sendRequestSucceeded=TRUE; //·¢ËÍÇëÇóÊÇ·ñ³É¹¦ DWORD dwSize=0; DWORD dwStatusCode=0; //httpÇëÇóÏìÓ¦´úÂë DWORD dwContentLength=0; //httpÇëÇóÏìÓ¦ÄÚÈݳ¤¶È DWORD dwErrorCode=0; //httpÇëÇóÏìÓ¦´íÎóÂë TCHAR szContentType[STRLEN_DEFAULT]={0}; //httpÇëÇóÏìÓ¦ÄÚÈÝÀàÐÍ CComBSTR szResText(L""); //httpÇëÇóÏìÓ¦·µ»Ø½á¹ûÎı¾ TCHAR* szHeader=NULL; //httpÇëÇóÏìӦͷÐÅÏ¢ BOOL getHeanderSucceeded=TRUE; //»ñÈ¡httpÇëÇóÏìӦͷÐÅÏ¢ÊÇ·ñ³É¹¦ char readBuffer[STRLEN_1K]={0}; //ÿ´Î¶ÁÈ¡µÄÏìÓ¦ÄÚÈÝ DWORD dwCalcLength=0; //ͨ¹ýÄÚÈݼÆËã³öÀ´µÄContentLength BOOL responseFileFlag=FALSE; //ÊÇ·ñÓÐÓÐЧµÄÏìÓ¦ÄÚÈݱ¾µØ±£´æÎļþ HANDLE hResponseFile=0; //ÇëÇóÏìÓ¦ÄÚÈݱ£´æµ½±¾µØÎļþµÄÎļþ¾ä±ú int requestCount=1; //ÇëÇó´ÎÊý TCHAR szAccept[] = _T("*/*"); LPTSTR AcceptTypes[2]={0}; AcceptTypes[0]=szAccept; AcceptTypes[1]=NULL; CComPtr<IHttpResponse> response; //ÇëÇóÏìÓ¦¶ÔÏó //Á¬½Ó dwPort=this->m_usUrlPort; //¶Ë¿ÚºÅ dwFlags= INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD |INTERNET_FLAG_KEEP_CONNECTION; if (this->m_blUrlIsSSL) dwFlags |= INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID; //´ò¿ªÁ¬½Ó if ( !(hConnect = InternetConnect(this->m_hOpen,this->m_szUrlHost , dwPort, _T(""), _T(""), INTERNET_SERVICE_HTTP, 0, (DWORD)&rcContext))){ dwError=GetLastError(); ErrorMsgBox(dwError,_T("Internet连接错误:%s")); goto clean; } reconnect: //´ò¿ªÇëÇó if ( !(hRequest = HttpOpenRequest(hConnect,this->m_szMethod,this->m_szUrlFile, _T("HTTP/1.1"), _T(""),(LPCTSTR*)AcceptTypes, dwFlags ,(DWORD)&rcContext))){ dwError=GetLastError(); ErrorMsgBox(dwError,_T("Internet打开请求错误:%s")); goto clean; } //ÓÐÖ¸¶¨Ìá½»Îļþ if (this->m_szPostFile && _tcslen(this->m_szPostFile)) { postFileFlag=PathFileExists(this->m_szPostFile); } //Èç¹ûÓÐÌá½»µÄÎļþ if(postFileFlag) { if ((hPostFile = CreateFile(this->m_szPostFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL)) == (HANDLE)(-1)) { dwError=GetLastError(); ErrorMsgBox(dwError,_T("提交的文件不存在或者无法打开:%s")); goto clean; } dwPostFileSize=GetFileSize(hPostFile,NULL); rcContext.dwPostFileLength=dwPostFileSize; TCHAR szPostFileSize[STRLEN_SMALL]={0}; _stprintf_s(szPostFileSize,_T("%d"),dwPostFileSize); this->AddHeader(T2BSTR(_T("Content-Length")),T2BSTR(szPostFileSize)); } //ÉèÖÃÇëÇóÍ· if (this->m_szHeader && _tcslen(this->m_szHeader)) { if (!HttpAddRequestHeaders(hRequest,this->m_szHeader,-1L,HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD)){ dwError=GetLastError(); ErrorMsgBox(dwError,_T("设置请求头错误:%s")); goto clean; } } /* InternetSetOption(FhRequest, INTERNET_OPTION_CLIENT_CERT_CONTEXT, (LPVOID)pdDesiredCert, sizeof(CERT_CONTEXT)); INTERNET_FLAG_KEEP_CONNECTION£¬INTERNET_FLAG_EXISTING_CONNECT */ //´¦Àí¶îÍâÉèÖ㨺öÂÔһЩ´íÎó£© dwFlags=0; dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA|SECURITY_FLAG_IGNORE_REVOCATION|SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP|SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS|SECURITY_FLAG_IGNORE_CERT_DATE_INVALID|SECURITY_FLAG_IGNORE_CERT_CN_INVALID; if (!InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS,&dwFlags,sizeof(dwFlags))){ dwError=GetLastError(); ErrorMsgBox(dwError,_T("设置请求选项错误:%s")); goto clean; } //·¢ËÍÇëÇó again: if(postFileFlag){ //ÓÐÌá½»ÎļþÄÚÈÝ INTERNET_BUFFERS BufferIn = {0}; DWORD dwBytesWritten; BYTE bts[STRLEN_1K]={0}; DWORD dwBtsRead=0; DWORD dwTotalBytes=0; BufferIn.dwStructSize = sizeof(INTERNET_BUFFERS); BufferIn.Next=NULL; BufferIn.dwBufferTotal=dwPostFileSize; sendRequestSucceeded=HttpSendRequestEx(hRequest, &BufferIn, NULL, HSR_INITIATE,(DWORD)&rcContext); while(ReadFile(hPostFile, bts, STRLEN_1K, &dwBtsRead, NULL) && dwBtsRead>0 && dwTotalBytes<=dwPostFileSize){ if (!InternetWriteFile(hRequest, bts,dwBtsRead, &dwBytesWritten)) { dwError=GetLastError(); ErrorMsgBox(dwError,_T("发送文件内容错误:%s")); goto clean; } dwTotalBytes+=dwBtsRead; rcContext.dwPostedLength=dwTotalBytes; } if(!HttpEndRequest(hRequest, NULL, 0, 0)) { dwError=GetLastError(); ErrorMsgBox(dwError,_T("关闭HTTP连接时错误:%s")); goto clean; } }//if end else{ //ûÓÐÌá½»ÎļþÄÚÈÝ sendRequestSucceeded=HttpSendRequest(hRequest, NULL, 0, NULL, 0); } //else end //²é¿´ÊÇ·ñÇëÇó·¢Ëͳɹ¦ if (!sendRequestSucceeded){ dwError=GetLastError(); switch(dwError){ case ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED: if(InternetErrorDlg(GetDesktopWindow(),hRequest,ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED,FLAGS_ERROR_UI_FILTER_FOR_ERRORS|FLAGS_ERROR_UI_FLAGS_GENERATE_DATA|FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,NULL)!=ERROR_SUCCESS) { requestCount++; if (requestCount>2) { InfoMsgBox(_T("已经尝试发送请求操作2次仍无法成功,请联系系统管理员!")); goto clean; } //Èç¹ûÑ»·ÇëÇó´ÎÊý¶àÓÚÁ½´Î£¬ÄÇô²»ÔÙÑ»· else goto again; } break; case ERROR_SUCCESS: break; default: ErrorMsgBox(dwError,_T("发送请求错误:%s")); goto clean; }//switch end }//if end //È¡ÏìӦ״̬ÏûÏ¢ dwSize= sizeof(DWORD); if (!HttpQueryInfo(hRequest,HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatusCode, &dwSize, NULL)) { dwError=GetLastError(); ErrorMsgBox(dwError,_T("获取响应代码错误:%s")); goto clean; } switch(dwStatusCode){ case HTTP_STATUS_DENIED: //ÐèÒªµÇ¼ case HTTP_STATUS_PROXY_AUTH_REQ: InfoMsgBox(_T("请求的地址需要登录,请您先登录后再发送请求!")); goto clean; case HTTP_STATUS_REDIRECT: //Öض¨Ïò case HTTP_STATUS_MOVED: { TCHAR szRedirect[4096]={0}; DWORD dwRedirect=sizeof(szRedirect); if (!HttpQueryInfo(hRequest,HTTP_QUERY_LOCATION,(LPVOID)szRedirect,&dwRedirect,NULL)){ dwError=GetLastError(); ErrorMsgBox(hr,_T("获取重定向地址错误:%s")); goto clean; } this->put_Url(szRedirect); //ÏȹرÕÁ¬½ÓºÍÇëÇó£¬È»ºóÖØÐÂÁ¬½Ó if (!InternetCloseHandle(hRequest)) { dwError=GetLastError(); ErrorMsgBox(dwError,_T("关闭HTTP请求错误:%s")); goto clean; } //if (!InternetCloseHandle(hConnect)) //{ // dwError=GetLastError(); // ErrorMsgBox(dwError,_T("关闭HTTP连接错误:%s")); // goto clean; //} //MessageBox(0,szRedirect,_T("重定向"),0); goto reconnect; } case HTTP_STATUS_OK: default: break; } //¹¹ÔìÇëÇóÏìÓ¦¡£ response.p=NULL; hr=response.CoCreateInstance(_T("YRExchange.HttpResponse")); if (FAILED(hr)) { ErrorMsgBox(hr,_T("创建HttpResponse错误:%s")); goto clean; } response->put_StatusCode(dwStatusCode); response->put_ErrorCode(dwError); //ÏìÓ¦ÄÚÈÝ´óС dwSize=sizeof(dwContentLength); if (HttpQueryInfo(hRequest,HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER ,&dwContentLength,&dwSize,NULL)){ //dwError=GetLastError(); //ErrorMsgBox(dwError,_T("获取请求响应内容长度错误:%s")); //goto clean; if (dwContentLength>0) { response->put_ContentLength(dwContentLength); rcContext.dwContentLength=dwContentLength; } } //ÏìÓ¦ÄÚÈÝÀàÐÍ dwSize=sizeof(szContentType); if (HttpQueryInfo(hRequest,HTTP_QUERY_CONTENT_TYPE ,(LPVOID)szContentType,&dwSize,NULL)){ //dwError=GetLastError(); //ErrorMsgBox(dwError,_T("获取请求响应内容类型错误:%s")); //goto clean; if (_tcslen(szContentType)>0) response->put_ContentType(T2BSTR(szContentType)); } //ËùÓÐÏìӦͷÐÅÏ¢ szHeader=new TCHAR[STRLEN_8K]; dwSize=STRLEN_8K*sizeof(TCHAR); getheader: getHeanderSucceeded=HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF ,(LPVOID)szHeader,&dwSize,NULL); if(!getHeanderSucceeded){ dwError=GetLastError(); if (dwError==ERROR_INSUFFICIENT_BUFFER){ TCHAR szXX[100]={0}; _stprintf_s(szXX,_T("dwError=%d,dwSize=%d"),dwError,dwSize); InfoMsgBox(szXX); SAFE_FREE_STRING_PTR(szHeader); szHeader=new TCHAR[dwSize+2]; dwSize+=2; dwSize=dwSize*sizeof(TCHAR); goto getheader; } else if (dwError!=ERROR_SUCCESS){ ErrorMsgBox(dwError,_T("获取请求响应头信息错误:%s")); goto clean; } } if(szHeader) response->put_Header(T2BSTR(szHeader)); //ÏìÓ¦ÄÚÈÝ´¦Àí if (this->m_blSaveResponseToFile && this->m_szResponseFile && _tcslen(this->m_szResponseFile)>0 && dwStatusCode != 201){ //°ÑÏìÓ¦ÄÚÈݱ£´æµ½Îļþ //´´½¨Îļþ hResponseFile = CreateFile(this->m_szResponseFile,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if (hResponseFile == INVALID_HANDLE_VALUE) { dwError=GetLastError(); ErrorMsgBox(dwError,_T("打开响应内容本地保存文件错误:%s")); goto clean; } responseFileFlag=TRUE; } do{ ZeroMemory(readBuffer,STRLEN_1K); dwSize=0; if (!InternetReadFile(hRequest,(LPVOID)readBuffer,sizeof(readBuffer),&dwSize)){ dwError=GetLastError(); ErrorMsgBox(dwError,_T("读取请求响应内容错误:%s")); goto clean; } if (dwSize!=0){ dwCalcLength+=dwSize; if (responseFileFlag){ //дÎļþ DWORD dwWritten=0; if (!WriteFile(hResponseFile,readBuffer,dwSize,&dwWritten,NULL)){ dwError=GetLastError(); ErrorMsgBox(dwError,_T("写入响应内容本地保存文件错误:%s")); goto clean; } } else{ //×·¼Óµ½ÏàÓ¦Îı¾ char buffer[STRLEN_1K+2]={0}; strncpy_s(buffer,readBuffer,dwSize); if (szResText) szResText.Append(buffer); } if (dwCalcLength==dwContentLength) break; rcContext.dwReceivedLength=dwCalcLength; }//if end }while(dwSize!=0); //°ÑÏìÓ¦ÄÚÈݱ£´æµ½ÏìÓ¦Îı¾ if (!responseFileFlag){ response->put_ContentText(szResText.Detach()); }// //×ÊÔ´»ØÊÕ clean: //¹Ø±ÕÎļþ if(hPostFile) CloseHandle(hPostFile); if(hResponseFile) { FlushFileBuffers(hResponseFile); CloseHandle(hResponseFile); } //»ØÊÕhttpÁ¬½ÓºÍÇëÇó¾ä±ú if (hRequest) InternetCloseHandle(hRequest); if (hConnect) InternetCloseHandle(hConnect); //¹Ø±Õ״̬¿ò //if (this->m_blShowRequestProgress) WaitForMultipleObjects(1,&rcContext.hThread,TRUE,INFINITE); if (this->m_blShowRequestProgress) EndDialog(rcContext.hProgressWnd,0); SAFE_FREE_STRING_PTR(szHeader); response.CopyTo(pVal); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_TagEntities(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszTagEntities ? m_cmLang.pszTagEntities : "" ); return S_OK; }
HRESULT STDMETHODCALLTYPE CLanguageX::get_Keywords(BSTR __RPC_FAR *pstrVal) { *pstrVal = T2BSTR( m_cmLang.pszKeywords ? m_cmLang.pszKeywords : "" ); return S_OK; }
STDMETHODIMP CAdRotator::get_GetAdvertisement(BSTR bstrVirtualPath, BSTR * pVal) { SCODE rc = E_FAIL; try { USES_CONVERSION; CContext cxt; rc = cxt.Init( CContext::get_Server ); if ( !FAILED(rc) ) { CComBSTR bstrPhysicalPath; // determine the physical path if ( ( rc = cxt.Server()->MapPath( bstrVirtualPath, &bstrPhysicalPath ) ) == S_OK ) { _TCHAR* szPath = OLE2T( bstrPhysicalPath ); CAdFilePtr pAdFile = AdFile( szPath ); if ( pAdFile.IsValid() ) { // refresh the ad file (make sure it's up to date) pAdFile->Refresh(); // block all writers CReader rdr( *pAdFile ); // if the border hasn't been set, use the default from the ad file short nBorder; if ( m_nBorder < 0 ) { nBorder = pAdFile->Border(); } else { nBorder = m_nBorder; } CAdDescPtr pAd = pAdFile->RandomAd(); if ( pAd.IsValid() ) { // write out the HTML line for this ad StringOutStream ss; if ( m_bClickable && ( pAd->m_strLink.size() > 1 ) ) { // use the href format ss << _T("<A HREF=\"") << pAdFile->Redirector() << _T("?url=") << pAd->m_strLink << _T("&image=") << pAd->m_strGif << _T("\" ") << m_strTargetFrame << _T(">"); } // now fill in the rest ss << _T("<IMG SRC=\"") << pAd->m_strGif << _T("\" ALT=\"") << pAd->m_strAlt << _T("\" WIDTH=") << pAdFile->Width() << _T(" HEIGHT=") << pAdFile->Height(); if ( pAdFile->HSpace() != CAdFile::defaultHSpace ) { ss << _T(" HSPACE=") << pAdFile->HSpace(); } if ( pAdFile->VSpace() != CAdFile::defaultVSpace ) { ss << _T(" VSPACE=") << pAdFile->VSpace(); } ss << _T(" BORDER=") << nBorder << _T(">"); if ( m_bClickable && ( pAd->m_strLink.size() > 1 ) ) { // put the trailing tag on ss << _T("</A>"); } String str = ss.toString(); if ( pVal ) { if ( *pVal ) { ::SysFreeString( *pVal ); } *pVal = T2BSTR( str.c_str() ); THROW_IF_NULL( *pVal ); rc = S_OK; } else { rc = E_POINTER; } } } } } else { _ASSERT(0); RaiseException( IDS_ERROR_NOSVR ); } // end if got server } catch ( alloc_err& ) { rc = E_OUTOFMEMORY; } catch ( ... ) { rc = E_FAIL; } return rc; }
STDMETHODIMP HttpRequest::get_UrlFile(BSTR* pVal){ ATLASSERT(pVal); *pVal=T2BSTR(this->m_szUrlFile); return S_OK; }
BOOL COledbDatabase::Open(HWND hWnd, LPCTSTR pstrConnectionString, LPCTSTR pstrUser, LPCTSTR pstrPassword, long iType) { HRESULT Hr; Close(); if( (iType & DB_OPEN_PROMPTDIALOG) != 0 ) { // Initialize from Data Links UI CComPtr<IDBPromptInitialize> spPrompt; Hr = spPrompt.CoCreateInstance(CLSID_DataLinks); if( FAILED(Hr) ) return _Error(Hr); if( hWnd == NULL ) hWnd = ::GetActiveWindow(); if( hWnd == NULL ) hWnd = ::GetDesktopWindow(); Hr = spPrompt->PromptDataSource( NULL, // pUnkOuter hWnd, // hWndParent DBPROMPTOPTIONS_PROPERTYSHEET, // dwPromptOptions 0, // cSourceTypeFilter NULL, // rgSourceTypeFilter NULL, // pwszszzProviderFilter IID_IDBInitialize, // riid (LPUNKNOWN*) &m_spInit); // ppDataSource if( Hr == S_FALSE ) Hr = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_CANCELLED); // The user clicked cancel if( FAILED(Hr) ) return _Error(Hr); } else { TCHAR szPrefix[] = _T("Provider="); ::lstrcpyn(szPrefix, pstrConnectionString, (sizeof(szPrefix) / sizeof(TCHAR))); if( ::lstrcmpi(szPrefix, _T("Provider=")) == 0 ) { // Connect using OLE DB connection string CComPtr<IDataInitialize> spDataInit; Hr = spDataInit.CoCreateInstance(CLSID_MSDAINITIALIZE); if( FAILED(Hr) ) return _Error(Hr); USES_CONVERSION; Hr = spDataInit->GetDataSource(NULL, CLSCTX_INPROC_SERVER, T2OLE((LPTSTR)pstrConnectionString), IID_IDBInitialize, (LPUNKNOWN*)&m_spInit); if( FAILED(Hr) ) return _Error(Hr); } else { // Initialize from ODBC DSN information Hr = m_spInit.CoCreateInstance(L"MSDASQL"); if( FAILED(Hr) ) return _Error(Hr); DBPROPSET PropSet; const ULONG nMaxProps = 4; DBPROP Prop[nMaxProps]; ULONG iProp = 0; // Initialize common property options. ULONG i; for( i = 0; i < nMaxProps; i++ ) { ::VariantInit(&Prop[i].vValue); Prop[i].dwOptions = DBPROPOPTIONS_REQUIRED; Prop[i].colid = DB_NULLID; } // Level of prompting that will be done to complete the connection process Prop[iProp].dwPropertyID = DBPROP_INIT_PROMPT; Prop[iProp].vValue.vt = VT_I2; Prop[iProp].vValue.iVal = DBPROMPT_NOPROMPT; iProp++; // Data source name--see the sample source included with the OLE DB SDK. Prop[iProp].dwPropertyID = DBPROP_INIT_DATASOURCE; Prop[iProp].vValue.vt = VT_BSTR; Prop[iProp].vValue.bstrVal = T2BSTR(pstrConnectionString); iProp++; if( pstrUser ) { // User ID Prop[iProp].dwPropertyID = DBPROP_AUTH_USERID; Prop[iProp].vValue.vt = VT_BSTR; Prop[iProp].vValue.bstrVal = T2BSTR(pstrUser); iProp++; } if( pstrPassword ) { // Password Prop[iProp].dwPropertyID = DBPROP_AUTH_PASSWORD; Prop[iProp].vValue.vt = VT_BSTR; Prop[iProp].vValue.bstrVal = T2BSTR(pstrPassword); iProp++; } // Prepare properties PropSet.guidPropertySet = DBPROPSET_DBINIT; PropSet.cProperties = iProp; PropSet.rgProperties = Prop; // Set initialization properties. CComQIPtr<IDBProperties> spProperties = m_spInit; Hr = spProperties->SetProperties(1, &PropSet); // Before we check if it failed, clean up for( i = 0; i < nMaxProps; i++ ) ::VariantClear(&Prop[i].vValue); // Did SetProperties() fail? if( FAILED(Hr) ) return _Error(Hr); } } return Connect(); }