int CSOAPUtil::LoadDOMDocument(char* data, int size, MSXML2::IXMLDOMDocumentPtr xmlDoc) { if( data == NULL || xmlDoc == NULL ) { return ERR_FALSE; } IStream* pIStream = NULL; IPersistStreamInit* pIPStream = NULL; HRESULT hr = CreateStreamOnHGlobal(NULL,TRUE,&pIStream); if(FAILED(hr)) { return ERR_FALSE; } hr = pIStream->Write(data,size,NULL); if(FAILED(hr)) { pIStream->Release(); pIStream = NULL; return ERR_FALSE; } pIStream->Commit(STGC_OVERWRITE); LARGE_INTEGER pos = {0, 0}; pIStream->Seek(pos, STREAM_SEEK_SET, NULL); hr = xmlDoc->QueryInterface(IID_IPersistStreamInit, (void **)&pIPStream); if(FAILED(hr)) { pIStream->Release(); pIStream = NULL; return ERR_FALSE; } hr = pIPStream->Load(pIStream); pIPStream->Release(); pIPStream = NULL; pIStream->Release(); pIStream = NULL; if(FAILED(hr)) { return ERR_FALSE; } else { return NO_ERR; } }