读书人

IXMLHTTPRequest 异步有关问题

发布时间: 2012-02-19 19:43:37 作者: rapoo

IXMLHTTPRequest 异步问题
IXMLHTTPRequest xmlrequest;

hr=xmlrequest.CreateInstance("Msxml2.XMLHTTP");
hr=xmlrequest->open(_bstr_t("GET"),_bstr_t("http://aion.plaync.co.kr/"),_bstr_t("TRUE"));
xmlrequest->onreadystatechange=huidiaohanshu;
xmlrequest->send();

xmlrequest->onreadystatechange=huidiaohanshu; 编译到这步的时候始终有错误

错误提示:
chaDlg.cpp(129) : error C3867: “CchaDlg::huidiaohanshu”: 函数调用缺少参数列表;请使用“&CchaDlg::huidiaohanshu”创建指向成员的指针

xmlrequest->onreadystatechange=huidiaohanshu(); 改成这样就提示:
1>.\chaDlg.cpp(129) : error C2664: “MSXML2::IXMLHTTPRequest::Putonreadystatechange”: 不能将参数 1 从“void”转换为“IDispatch *”

我用的是 onreadystatechange属性,不是Putonreadystatechange函数啊

xmlrequest->onreadystatechange=&huidiaohanshu(); 这样也不行

[解决办法]
IXMLHTTPRequest不是智能指针,你的代码是针对智能指针的
要么改用智能指针,要么改用标准COM调用……
[解决办法]
IXMLHTTPRequestPtr xmlrequest;

还有,xmlrequest->onreadystatechange 虽然名义上叫回调函数,但不能传递真正的函数,只能传递 IDispatch*,在脚本中的函数也都是 IDispatch*
[解决办法]
MSDN上的代码:
BEGIN_DISPATCH_MAP(CXMLDOMSamples, CCmdTarget)
DISP_FUNCTION_ID(CXMLDOMSamples, "Ready State Event Handler",
DISPID_XMLDOMEVENT_ONREADYSTATECHANGE, DOMDocCheckState, VT_EMPTY, 0)
END_DISPATCH_MAP()

m_hr = pCP->Advise(GetIDispatch(TRUE), &m_pdwCookie);

ATL的话可以用IDispEventSimpleImpl等来实现事件回调

读书人网 >VC/MFC

热点推荐