首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

IXMLHTTPRequest 异步有关问题

2012-02-19 
IXMLHTTPRequest 异步问题IXMLHTTPRequest xmlrequesthrxmlrequest.CreateInstance(Msxml2.XMLHTTP)h

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等来实现事件回调

热点排行