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