想实现ok.prm文件的加载并且在listctrl中显示
可是系统总是显示错误,如下:
MyFormView.obj : error LNK2001: unresolved external symbol _CLSID_DOMDocument40
MyFormView.obj : error LNK2001: unresolved external symbol _IID_IXMLDOMDocument2
MyFormView.obj : error LNK2001: unresolved external symbol "void __stdcall _com_issue_error(long)" (?_com_issue_error@@YGXJ@Z)
MyFormView.obj : error LNK2001: unresolved external symbol "unsigned short * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPAGPBD@Z)
MyFormView.obj : error LNK2001: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(unsigned short *)" (?ConvertBSTRToString@_com_util@@YGPADPAG@Z)
高手帮看看怎么回事,谢谢了

解决方案 »

  1.   

    程序:
    CMyFormView::CMyFormView()
    : CFormView(CMyFormView::IDD)
    {
    HRESULT hr = CoCreateInstance(CLSID_DOMDocument40, 
                         NULL, 
                         CLSCTX_INPROC_SERVER, 
                         IID_IXMLDOMDocument2,
                         (void**)&pxmldoc);
    if (FAILED(hr)) 
    {
    this->pxmldoc=NULL;
    }
    else{
    BSTR bstr = NULL;
    VARIANT vSrc;
    VARIANT_BOOL status; VariantInit(&vSrc);
    V_BSTR(&vSrc) = SysAllocString(L"ok.prm");                   V_VT(&vSrc) = VT_BSTR;
    pxmldoc->load(vSrc, &status); if(status!=VARIANT_TRUE)
    {
    if (pxmldoc)  
    {
    pxmldoc->Release();
    this->pxmldoc=NULL;
    }
    }
    if (&vSrc) VariantClear(&vSrc);
       }
    m_ImageList.Create(IDB_BITMAPLIST,16,1,RGB(192,192,192));
    }
      

  2.   

    void CMyFormView::OnInitialUpdate()
    {
    CFormView::OnInitialUpdate();

    CListCtrl* pListCtrl=(CListCtrl* )this->GetDlgItem(IDC_LISTXML);
    pListCtrl->SetImageList(&m_ImageList,LVSIL_SMALL);
    pListCtrl->SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT ); CRect rect;
    pListCtrl->GetWindowRect(rect); pListCtrl->InsertColumn(0,"编号",LVCFMT_LEFT,150);
    pListCtrl->InsertColumn(1,"机能概要",LVCFMT_LEFT,150);
    pListCtrl->InsertColumn(2,"添加日期",LVCFMT_LEFT,150); if(pxmldoc){
    CComPtr<IXMLDOMNodeList> pDomList; HRESULT hr = pxmldoc->get_childNodes(&pDomList); if(SUCCEEDED(hr)){
    long length=0;
    if(FAILED(pDomList->get_length(&length)))return; for(int i=0;i<length;i++)
    {
    CComPtr<IXMLDOMNode> pDomNode;
    BSTR nodevalue;

    if(FAILED(pDomList->get_item(i,&pDomNode)))return;
    if(FAILED(pDomNode->get_nodeName(&nodevalue)))return; _bstr_t xml("xml");
    _bstr_t bNodeValue;
    if(bNodeValue==xml)continue;
    CComPtr<IXMLDOMNodeList> pChildList;
    if(FAILED(pDomNode->get_childNodes(&pChildList)))
    return; long childLength=0;
    if(FAILED(pChildList->get_length(&childLength)))
    return; for(int j=0;j<childLength;j++)
    {
    CComPtr<IXMLDOMNode> projectNode;
    if(FAILED(pChildList->get_item(j,&projectNode)))
    return; CComPtr<IXMLDOMNodeList> pProjectList;
    if(FAILED(projectNode->get_childNodes(&pProjectList)))
    return; long projectChildLength;
    if(FAILED(pProjectList->get_length(&projectChildLength)))
    return; for(int k=0;k<projectChildLength;k++)
    {
    CComPtr<IXMLDOMNode> projectChildNode;
    if(FAILED(pProjectList->get_item(k,&projectChildNode)))
    return; BSTR nodeName;
    if(FAILED(projectChildNode->get_nodeName(&nodeName)))
    return; _bstr_t bNodeName(nodeName);
    _bstr_t data("projdatas"); if(bNodeName==data){
    CComPtr<IXMLDOMNodeList> pProjectsList;
    if(FAILED(projectChildNode->get_childNodes(&pProjectsList)))
    return; long projectsLength=0;
    if(FAILED(pProjectsList->get_length(&projectsLength)))
    return; for(int ind=0;ind<projectsLength;ind++)
    {
    CComPtr<IXMLDOMNode> projectNode; if(FAILED(pProjectsList->get_item(ind,&projectNode)))
    return; CComPtr<IXMLDOMNodeList> projectList;
    if(FAILED(projectNode->get_childNodes(&projectList)))
    return; long projectNodelength=0;
    if(FAILED(projectList->get_length(&projectNodelength)))
    return;

    _bstr_t icon("smallicon");
    _bstr_t col("col2");
    _bstr_t col1("col1"); BSTR iconText;
    BSTR colText;
    BSTR col1Text; for(int first=0;first<projectNodelength;first++)
    {
    CComPtr<IXMLDOMNode> childNode;
    if(FAILED(projectList->get_item(first,&childNode)))
    return; BSTR projectNodeName;
    if(FAILED(childNode->get_nodeName(&projectNodeName)))
    return; _bstr_t bProjectNodeName(projectNodeName);
    if(bProjectNodeName==icon)
    {
    if(FAILED(childNode->get_text(&iconText)))
    return;
    }
    else if(bProjectNodeName==col)
    {
    if(FAILED(childNode->get_text(&colText)))
    return;
    }
    else if(bProjectNodeName==col1)
    {
    if(FAILED(childNode->get_text(&col1Text)))
    return;
    }
    } _bstr_t bIconText(iconText);
    _bstr_t bColText(colText);
    _bstr_t bCol1Text(col1Text); int iconIndex=0;
    _bstr_t bBug("bug");
    _bstr_t bError("error");
    if(bIconText==bBug)iconIndex=1;
    else if(bIconText==bError)iconIndex=2;

    int nItem=pListCtrl->InsertItem(pListCtrl->GetItemCount()
    ,bCol1Text,iconIndex); pListCtrl->SetItemText(nItem,1,bColText);
    CTime t=CTime::GetCurrentTime();
    pListCtrl->SetItemText(nItem,2,t.Format("%Y-%m-%d"));
    }
    } }
    }
    }
    }
    }
    ((CMainFrame*)AfxGetApp()->GetMainWnd())->OnMyRequest();
    pListCtrl->DeleteItem(pListCtrl->GetItemCount()-1);
    }
      

  3.   

    你用#import  "msxml.dll"
    这个会生成一个.h 和.c文件自动加入到工程里面,编译就不会有这个问题了
      

  4.   

    可以到firstobject下载一个CMarkup类,专门处理xml文件,挺好用的
      

  5.   

    可以看出你用了msxml4.0,加上:#import <MSXML4.dll> named_guids
    using namespace MSXML2;应该就没有问题了吧
      

  6.   

    有时开发时需要手动的安装 XMLSDK 的开发包,你可以试一下,微软网站上有下载