• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            MSXML.XMLHttp

            Posted on 2008-10-26 21:18 S.l.e!ep.¢% 閱讀(2558) 評論(1)  編輯 收藏 引用 所屬分類: COM

            用 MSXML.XMLHttp 獲取網(wǎng)頁數(shù)據(jù),如果是“同步”,那么
            Step 1.?
            在 BOOL CTestApp::InitInstance() 和 int CWinApp::ExitInstance()?分別加上??
            ?CoInitialize(NULL);? // 初始化 COM?? 和 ?CoUninitialize(); // 反初始化 COM

            Step 2.
            在使用的地方加上頭文件?
            #import <msxml4.dll>
            using namespace MSXML2;

            Step3.
            void CTestDlg::OnButton1()
            {
            ?CString strResult;
            ?
            ?IXMLHTTPRequestPtr httpRes;
            ?HRESULT hr=httpRes.CreateInstance("MSXML2.XMLHTTP");

            ?if (!SUCCEEDED(hr) )
            ?{
            ??AfxMessageBox("無法創(chuàng)建XMLHTTP對象,請檢查是否安裝了MS XML運(yùn)行庫!");
            ?}

            ?try
            ?{
            ??LPCTSTR url = "??
            ??httpRes->open("Get", url, VARIANT_FALSE, "", "");
            ??httpRes->send();

            ??if( (httpRes->readyState) == 4) //4時(shí)表示數(shù)據(jù)已加載完
            ??{
            ???strResult = httpRes->responseText.copy();
            ???AfxMessageBox(strResult);
            ??}

            ??httpRes.Release();
            ?}
            ?catch (_com_error &e)
            ?{
            ??AfxMessageBox(e.Description());???
            ?}

            ?}

            這樣就完工了

            如果是“異步”調(diào)用
            Step1.

            // XMLSink.h: interface for the CXMLSink class.
            //
            //////////////////////////////////////////////////////////////////////

            #if !defined(AFX_XMLSINK_H__95AD1101_6F98_45C9_9EE3_EC266BBF514B__INCLUDED_)
            #define AFX_XMLSINK_H__95AD1101_6F98_45C9_9EE3_EC266BBF514B__INCLUDED_

            #if _MSC_VER > 1000
            #pragma once
            #endif // _MSC_VER > 1000

            #import "msxml4.dll"
            using namespace MSXML2;??

            class CXMLSink : public IDispatch
            {
            public:
            ?CXMLSink();
            ?virtual ~CXMLSink();

            ?// for IUnknown
            ?STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppv);
            ?STDMETHOD_(ULONG, AddRef)();
            ?STDMETHOD_(ULONG, Release)();

            ?// for IDispatch
            ?STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);
            ?STDMETHOD(GetTypeInfo)(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo);
            ?STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId);
            ??? STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS __RPC_FAR *pDispParams, VARIANT __RPC_FAR *pVarResult, EXCEPINFO __RPC_FAR *pExcepInfo, UINT __RPC_FAR *puArgErr);

            ?//
            ?void SetEventSource(IUnknown* punk);

            private:
            ?IUnknown*?? m_pEventSource;
            ?DWORD?? m_dwRef;
            };

            #endif // !defined(AFX_XMLSINK_H__95AD1101_6F98_45C9_9EE3_EC266BBF514B__INCLUDED_)

            Step 2.
            // XMLSink.cpp: implementation of the CXMLSink class.
            //
            //////////////////////////////////////////////////////////////////////

            #include "stdafx.h"
            #include "XMLSink.h"

            #ifdef _DEBUG
            #undef THIS_FILE
            static char THIS_FILE[]=__FILE__;
            #define new DEBUG_NEW
            #endif

            //////////////////////////////////////////////////////////////////////
            // Construction/Destruction
            //////////////////////////////////////////////////////////////////////

            CXMLSink::CXMLSink() : m_dwRef(1), m_pEventSource(NULL)
            {
            }

            CXMLSink::~CXMLSink()
            {
            ?if(m_pEventSource)??
            ??m_pEventSource->Release();??

            ?m_pEventSource = NULL;?
            }

            // IUnknown method
            STDMETHODIMP CXMLSink::QueryInterface(REFIID riid, LPVOID* ppv)??
            {??
            ?OutputDebugString(_T("QueryInterface \n"));
            ?
            ?*ppv = NULL;??

            ?if(IID_IUnknown == riid)??
            ?{??
            ??*ppv = (LPUNKNOWN)this;??
            ??AddRef();
            ??return NOERROR;??
            ?}??
            ?else if (IID_IDispatch == riid)??
            ?{??
            ??*ppv = (IDispatch*)this;??
            ??AddRef();??
            ??return NOERROR;??
            ?}??
            ?else??
            ?{
            ??return E_NOTIMPL;??
            ?}
            }??

            STDMETHODIMP_(ULONG) CXMLSink::AddRef()
            {
            ?return ++m_dwRef;
            }??

            STDMETHODIMP_(ULONG) CXMLSink::Release()??
            {??
            ?if(--m_dwRef == 0)??
            ?{??
            ??delete this;??
            ??return 0;??
            ?}
            ?
            ?return m_dwRef;??
            }??

            // IDispatch method??
            STDMETHODIMP CXMLSink::GetTypeInfoCount(UINT* pctinfo)
            {
            ?OutputDebugString(_T("GetTypeInfoCount\n"));
            ?return E_NOTIMPL;
            }??

            STDMETHODIMP CXMLSink::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo)
            {
            ?OutputDebugString(_T("GetTypeInfo\n"));??
            ?return E_NOTIMPL;
            }??

            STDMETHODIMP CXMLSink::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId)
            {
            ?OutputDebugString(_T("GetIDsOfNames\n"));
            ?return E_NOTIMPL;
            }?
            ????????????????
            STDMETHODIMP CXMLSink::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS __RPC_FAR *pDispParams,??
            ????????????????? VARIANT __RPC_FAR *pVarResult, EXCEPINFO __RPC_FAR *pExcepInfo, UINT __RPC_FAR *puArgErr)??
            {??
            ?OutputDebugString(_T("Invoke\n"));
            ?
            ?MSXML2::IXMLHTTPRequestPtr xmldom(m_pEventSource);?
            ?
            ?if(xmldom)??
            ?{??
            ??long lReadyState;??
            ??xmldom->get_readyState(&lReadyState);??
            ??
            ??char buf[256];??
            ??wsprintf(buf, "get_readystate return %d \n", lReadyState);??
            ??
            ??OutputDebugString(_T(buf));
            ??
            ??if(lReadyState == 4)??
            ??{??
            ???CString strResult = xmldom->GetresponseText().copy();
            ???AfxMessageBox(strResult);
            ??}
            ?}

            ?return NOERROR;??
            }??

            void CXMLSink::SetEventSource(IUnknown* punk)
            {
            ?m_pEventSource = punk;

            ?if(punk)??
            ??punk->AddRef();
            }?

            Step 3.
            private:
            ?CXMLSink m_XmlSink;
            ?IXMLHTTPRequestPtr m_httpRes;

            Step 4.
            void CDlg::OnButton1()
            {
            ?CString strResult;
            ?
            ?HRESULT hr = m_httpRes.CreateInstance("MSXML2.XMLHTTP");

            ?if (!SUCCEEDED(hr) )
            ?{
            ??AfxMessageBox("無法創(chuàng)建XMLHTTP對象,請檢查是否安裝了MS XML運(yùn)行庫!");
            ?}

            ?m_XmlSink.SetEventSource(m_httpRes);

            ?try
            ?{
            ??LPCTSTR url = "
            ??
            ??m_httpRes->open("Get", url, VARIANT_TRUE, "", "");
            ??m_httpRes->put_onreadystatechange(&m_XmlSink);
            ??m_httpRes->send();
            ?}
            ?catch (_com_error &e)
            ?{
            ??AfxMessageBox(e.Description());???
            ?}

            }

            異步方式還未解決的問題;
            1. 如果一直沒響應(yīng),超時(shí)如何處理?
            2. 如果在未響應(yīng)時(shí),提前退出程序,又該如何釋放內(nèi)存?

            Feedback

            # re: MSXML.XMLHttp  回復(fù)  更多評論   

            2008-11-06 09:27 by yuantiter
            您好,ObjectARX二次開發(fā)環(huán)境組合之 (三) ObjectARX 2005 + AutoCAD 2004/2005 + VC.Net 2003

            需調(diào)用或驗(yàn)證大量VC7.0的庫,否則編譯不過。

            解決方案:拷貝VC2002安裝目錄下/VC7\atlmfc\lib下類似*70*的文件到VC2003下,主要有:
            mfc70.lib、 mfc70d.lib、mfc70u.lib、mfc70ud.lib

            mfcs70.lib、mfcs70.pdb、mfcs70d.lib、mfcs70d.pdb

            mfcs70u.lib、mfcs70u.pdb、mfcs70ud.lib、mfcs70ud.pdb
            請問如何獲得!!
            久久久99精品一区二区| 影音先锋女人AV鲁色资源网久久 | 免费观看成人久久网免费观看| 久久亚洲国产成人精品无码区| 国产一区二区精品久久| 无码精品久久久天天影视| 波多野结衣久久精品| | 久久久久久a亚洲欧洲aⅴ| 久久亚洲AV成人出白浆无码国产 | 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 久久精品www人人爽人人| 无码八A片人妻少妇久久| 久久99精品久久久久久噜噜| 精品久久久久久久| 99久久无码一区人妻| 久久久久国产精品麻豆AR影院| 久久精品成人免费观看97| 无码精品久久一区二区三区 | 亚洲国产成人久久综合野外| 国内精品久久久久影院亚洲| 国产aⅴ激情无码久久| 国产亚洲综合久久系列| 国产精品午夜久久| 精品人妻伦九区久久AAA片69| 亚洲人成精品久久久久| 波多野结衣中文字幕久久| 丰满少妇高潮惨叫久久久| 伊人久久大香线蕉影院95| 青青草原综合久久大伊人| 成人国内精品久久久久一区| 国产精品狼人久久久久影院 | 国产成人精品白浆久久69| 99久久精品免费| 麻豆精品久久久久久久99蜜桃| 97精品久久天干天天天按摩| 久久99精品免费一区二区| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产激情久久久久影院| 久久99精品国产自在现线小黄鸭 | 久久综合亚洲鲁鲁五月天|