コード例 #1
0
ファイル: SOAPUtil.cpp プロジェクト: HK323232/EDCB
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;
    }
}