我的代码简单如下:
头文件:
#import "msxml.dll"
using namespace MSXML;
class CXmlReadWrite  
{
protected:
static IXMLDOMDocument* CoCreateIXMLDOMDocumentInstance();
public:
CXmlReadWrite();
virtual ~CXmlReadWrite();
};实现文件:
IXMLDOMDocument* CXmlReadWrite::CoCreateIXMLDOMDocumentInstance()
{
  IXMLDOMDocument* pResult = NULL;
  HRESULT hr = ::CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER
    || CLSCTX_LOCAL_SERVER, __uuidof(IXMLDOMDocument), (void**)&pResult);
  if (FAILED(hr) || NULL == pResult) 
    //::MessageBox(NULL, "abc", "abc", 0);
    throw "Unable to create XML parser object.\nPlease install msxml.";
  return pResult;
}可为什么总是创建不成功?试过用msxml4也不行!
望各位指点!谢!!!

解决方案 »

  1.   

    纠正一个问题,是创建XML文档对象并且查询其IXMLDOMDocument接口。接口不是类,不能创建接口对象。MSXML4.0版本的DOMDocument只能用版本相关的progid "Msxml2.DOMDocument.4.0来创建",使用uuid或者版本无关的progid"Msxml2.DOMDocument"是不能创建4.0版本的DOMDocument的,参见www.microsoft.com/xml里面的MSXML4 SDK文档可以用CLSIDFromProgID来把progid翻译成CLSID。在查找系统信息的时候居然发现了计算机上居然有Msxml2.DOMDocument.5.0的注册项,可惜微软没有发布5.0版本的MSXMLSDK。
      

  2.   

    什么错误贴出来?msxmlsdk5.0已经有了,在.net 2005beta中
      

  3.   

    // XML.cpp : Defines the entry point for the console application.
    //#include "stdafx.h"
    #include "XML.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif#import "msxml.dll" rename_namespace("XML")
    /////////////////////////////////////////////////////////////////////////////
    // The one and only application objectCWinApp theApp;using namespace std;void ReadXML()
    {
    XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(DOMDocument));
    xmlDoc->async = FALSE;//同步加载XML文件
    char szFilePath[]="hxk.xml";
    xmlDoc->load(szFilePath);
    XML::IXMLDOMElementPtr pDocElement = xmlDoc->GetdocumentElement();
    XML::IXMLDOMElementPtr pElement = pDocElement ->selectSingleNode("ShangHai");
    AfxMessageBox((_bstr_t)pElement->getAttribute("Weather"));
    AfxMessageBox(pElement->Gettext());
    //AfxMessageBox(xmlDoc->xml);
    }int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    int nRetCode = 0; // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
    // TODO: change error code to suit your needs
    cerr << _T("Fatal Error: MFC initialization failed") << endl;
    nRetCode = 1;
    }
    else
    {
    CoInitialize(NULL);
    try
    {
    XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(DOMDocument));
    XML::IXMLDOMElementPtr pDocElemt = xmlDoc->createElement("China");
    xmlDoc->appendChild(pDocElemt);
    XML::IXMLDOMElementPtr pNewDocElemt = xmlDoc ->createElement("Beijing");
    pNewDocElemt ->Puttext("-11");
    pDocElemt->appendChild(pNewDocElemt);
    pNewDocElemt = xmlDoc->createElement("ShangHai");
    pNewDocElemt ->Puttext("9");
    pNewDocElemt ->setAttribute("Weather",_variant_t("Cloudy"));
    pDocElemt ->appendChild(pNewDocElemt); //xmlDoc ->save(_variant_t("d:\\hxk.xml")); ReadXML(); }
    catch (_com_error& err)
    {
    CString strError = "加载XML文件失败";
    strError += err.Description();
    AfxMessageBox(strError);
    } CoUninitialize();
    } return nRetCode;
    }
    呵呵参考参考