AJAX 비동기 처리를 위한 IXMLHTTPRequest, COM 인터페이스의 하나이기 때문에 웹 브라우저 안에서 뿐 아니라 윈도우즈어플리케이션으로도 구현이 가능합니다.
더욱이 IXMLHTTPRequest는 Windows CE기반의 Windows Mobile에서도 구현이 되어있을 뿐 아니라, IXMLDOMDocument와 같은 XML DOM 인터페이스와도 바로 연결이 가능하므로 윈도우즈 어플리케이션에서 복잡한 Socket처리나, WinInet라이브러리를 별도로 사용하지 않아도 쉽게 웹의 OpenAPI를 사용할 수 있습니다. ( 내부적으로는 WinInet, Socket을 사용합니다. )
http://msdn.microsoft.com/en-us/library/aa924919.aspx : IXMLHTTPRequest 인터페이스 설명
웹의 AJAX와 같이 동기, 비동기 방식을 모두사용 가능할 뿐만아니라 모든 메소드를 제공하고 IStream 방식으로 받아 아래의 포스팅과 같이 파일로 저장할 수도있습니다.
CComQIPtrpDispatch; CComPtr pXMLHTTP; CComPtr pXMLDoc; const CComVariant VAL_NULL = NULL; const CComVariant VAL_FALSE = FALSE; long length_posts = 0; CComBSTR bstr; HRESULT hr; pXMLHTTP.CoCreateInstance(CLSID_XMLHTTP); pXMLHTTP->open(CComBSTR("GET"), CComBSTR("http://me2day.net/api/get_posts/ggungs"), VAL_FALSE , VAL_NULL , VAL_NULL); hr = pXMLHTTP->send(VAL_NULL); if(hr != S_OK) { //MessageBox(L"전송실패"); return; } hr = pXMLHTTP->get_responseXML(&pDispatch); if(hr == E_PENDING) { //MessageBox(L"PENDING"); return; } pDispatch->QueryInterface(IID_IXMLDOMDocument, (void **)&pXMLDoc); pDispatch.Release(); if(pNodeList) { pNodeList.Release(); } pXMLDoc->selectNodes(L"/posts/post", &pNodeList); pNodeList->get_length(&length_posts); ..... // XML 처리 pXMLDoc.Release(); pXMLHTTP.Release();
위의 예는 동기 방식으로 미투데이 OpenAPI에 접속하여 XML 데이터를 가져와서 XML 파싱하는 예입니다.
물론 AJAX의 꽃인 비동기 처리로 onreadystatechange에 자바스크립트처럼 함수가 호출되도록 할 수 있지만 VC++ 에서는 좀 복잡하게 처리해야 할듯 합니다.
(http://www.ookii.org/post/using_ixmlhttprequestonreadystatechange_from_c.aspx 참고)
IXMLHTTPRequest 인터페이스를 잘 사용하면 HTTP 프로토콜 로직 처리를 안해도 되기 때문에 빠르게 개발가능합니다.