예제 #1
1
파일: View.cpp 프로젝트: quinsmpang/Tools
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();
	}
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #5
0
void CWebBrowserUI::NavigateUrl( LPCTSTR lpszUrl )
{
    if (m_pWebBrowser2 && lpszUrl)
    {
        m_pWebBrowser2->Navigate((BSTR)SysAllocString(T2BSTR(lpszUrl)),NULL,NULL,NULL,NULL);
    }
}
예제 #6
0
STDMETHODIMP HttpRequest::get_ResponseFile(BSTR* pVal)
{
	ATLASSERT(pVal);
	*pVal=NULL;
	if (m_szResponseFile!=NULL) *pVal=T2BSTR(m_szResponseFile);
	return S_OK;
}
예제 #7
0
STDMETHODIMP HttpRequest::get_SessionKey(BSTR* pVal)
{
	ATLASSERT(pVal);
	*pVal=NULL;
	if (_tcslen(m_szSessionKey)>0) *pVal=T2BSTR(m_szSessionKey);
	return S_OK;
}
예제 #8
0
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();	
			}
		}
	}
예제 #10
0
// HttpRequest
STDMETHODIMP HttpRequest::get_Url(BSTR* pVal)
{
	ATLASSERT(pVal);
	*pVal=NULL;
	if (_tcslen(m_szUrl)>0) *pVal=T2BSTR(m_szUrl);
	return S_OK;
}
예제 #11
0
//	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;
}
예제 #12
0
파일: globalsx.cpp 프로젝트: DeegC/10d
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;
}
예제 #13
0
STDMETHODIMP CMixerControl::get_name(BSTR *pVal)
{
    if(!pVal) return E_POINTER;

    *pVal = T2BSTR(m_mc.szName);

    return S_OK;
}
예제 #14
0
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;
}
예제 #15
0
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);
	}
}
예제 #16
0
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);
    }
}
예제 #17
0
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;
}
예제 #18
0
// 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;
}
예제 #19
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_TerminatorChar(BSTR __RPC_FAR *pstrVal)
{
   TCHAR sz[ 2 ] = { m_cmLang.chTerminator, _T('\0') };
   *pstrVal = T2BSTR( sz );
   return S_OK;
}
예제 #20
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_StringDelims(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszStringDelims ? m_cmLang.pszStringDelims : "" );
   return S_OK;
}
예제 #21
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_ScopeKeywords2(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszScopeKeywords2 ? m_cmLang.pszScopeKeywords2 : "" );
   return S_OK;
}
예제 #22
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_MultiLineComments2(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszMultiLineComments2 ? m_cmLang.pszMultiLineComments2 : "" );
   return S_OK;
}
예제 #23
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_SingleLineComments(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszSingleLineComments ? m_cmLang.pszSingleLineComments : "" );
   return S_OK;
}
예제 #24
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_Operators(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszOperators ? m_cmLang.pszOperators : "" );
   return S_OK;
}
예제 #25
0
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;
}
예제 #26
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_TagEntities(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszTagEntities ? m_cmLang.pszTagEntities : "" );
   return S_OK;
}
예제 #27
0
파일: langx.cpp 프로젝트: arksoftgit/10c
HRESULT STDMETHODCALLTYPE CLanguageX::get_Keywords(BSTR __RPC_FAR *pstrVal)
{
   *pstrVal = T2BSTR( m_cmLang.pszKeywords ? m_cmLang.pszKeywords : "" );
   return S_OK;
}
예제 #28
0
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;
}
예제 #29
0
STDMETHODIMP HttpRequest::get_UrlFile(BSTR* pVal){
	ATLASSERT(pVal);
	*pVal=T2BSTR(this->m_szUrlFile);
	return S_OK;
}
예제 #30
0
파일: DbOledb.cpp 프로젝트: okigan/dblib
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();
}