如何使用msxml3.0

594king 2003-11-20 10:55:05
我刚刚开始学习使用msxml,我在微软网站那里下载了msxml3.0sdk,安装之后就建了一个工程,然后按照网友的例子练习,我在option中已经将sdk的inc目录和lib目录都分别加进include和library路径下了,我的代码如下:
void CTestXMLDoc::CreateDOMTree()
{
HRESULT hr;
IXMLDOMDocument * pXMLDoc = NULL;

hr=CoInitialize(NULL);//COM的初始化
//得到关于IXMLDOMDocument接口的指针pXMLDOC。
hr = CoCreateInstance(CLSID_DOMDocument2, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument, (void**)&pXMLDoc);
}

我还在该cpp文件中声明了:
#include "msxml2.h"
#import "msxml3.dll"

编译之后发现出现以下问题
TestXMLDoc.obj : error LNK2001: unresolved external symbol _CLSID_DOMDocument2
TestXMLDoc.obj : error LNK2001: unresolved external symbol _IID_IXMLDOMDocument
Debug/TestXML.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Creating browse info file...

TestXML.exe - 3 error(s), 0 warning(s)


后来我看帮助发现还需要msxml2.idl文件,我就又把它声明了:
#import "msxml2.idl"

但是编译之后就出现了一下错误:
E:\CIMDemo\Src\TestXML\TestXMLDoc.cpp(10) : fatal error C1083: Cannot open type library file: 'msxml2.idl': 加载类型库/DLL 时出错。
Error executing cl.exe.
Creating browse info file...
BSCMAKE: error BK1506 : cannot open file '.\Debug\TestXMLDoc.sbr': No such file or directory
Error executing bscmake.exe.

TestXML.exe - 2 error(s), 0 warning(s)

我的msxml2.idl文件在sdk的inc文件夹下,已经加到include路径下了,请使用过msxml3的DX指点迷津,谢谢
...全文
420 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
kikiven 2003-12-05
用MSXML3前的环境设置:
在StdAfx.h里加上:

#import <msxml3.dll> //如果找不到,在确保安装了MSXML3之后,加上绝对路径
using namespace MSXML2;
其它地方不用设置就已经可以用MSXML3提供的类和其它信息了.
回复
594king 2003-11-21
请教huanyun(无妻徒刑),.cpp中using namespace MSXML2;那么#import "c:\WINNT\system32\msxml3.dll"放在那里?我把它也放在了TestXMLDoc.cpp文件中了,我还是用我的代码编译了一下,出现了以下的错误
Compiling...
TestXMLDoc.cpp
E:\CIMDemo\Src\TestXML\TestXMLDoc.cpp(97) : error C2872: 'IXMLDOMDocument' : ambiguous symbol
Error executing cl.exe.
Creating browse info file...

TestXML.exe - 1 error(s), 0 warning(s)

我用大哥的代码编译也一样,还要麻烦大哥帮帮小弟,先谢谢了
回复
ndy_w 2003-11-21
不用sdk,import就行了,会生成tlh, tli,看看tlh就会用。
idl不能import,是用midl来编译的。
回复
huanyun 2003-11-21
例子

USES_CONVERSION;
HRESULT hr = NULL;
char pszFilePath[160];
memset(pszFilePath, 0, sizeof(pszFilePath));
sprintf(pszFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);

IXMLDOMDocumentPtr pXmlDoc;
IXMLDOMNodePtr pXmlNode;
IXMLDOMNodeListPtr pXmlNodeList;

try
{
hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
if(FAILED(hr))
{
MessageBox(0,"error!",0,0);
}
else
{
pXmlDoc->load(_bstr_t(pszFilePath));
pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/classdesc"));
pXmlNode = pXmlNodeList->nextNode();
if(pXmlNode == NULL)
{
MessageBox(NULL, "类的说明不存在", "警告", 0);
strClassDesc.Empty();
}
else
{
pXmlNode->Puttext(_bstr_t(strClassDesc));
}
pXmlDoc->save(_bstr_t(pszFilePath));
}
}
catch(_com_error& e)
{
MessageBox(0, W2A(e.Description()),0,0);
}

return true;
回复
huanyun 2003-11-21
#import "c:\WINNT\system32\msxml3.dll"

.cpp中
using namespace MSXML2;
回复
594king 2003-11-21
idl没有import,也用midl编译通过了(在midl中需要把MkTypeLib compatible选项去掉)但是如下问题仍然出现
TestXMLDoc.obj : error LNK2001: unresolved external symbol _CLSID_DOMDocument2
TestXMLDoc.obj : error LNK2001: unresolved external symbol _IID_IXMLDOMDocument
Debug/TestXML.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Creating browse info file...

TestXML.exe - 3 error(s), 0 warning(s)

不知是那里没有设置好
回复
相关推荐
发帖
HTML/XML
创建于2007-09-28

3055

社区成员

VC/MFC HTML/XML
申请成为版主
帖子事件
创建了帖子
2003-11-20 10:55
社区公告
暂无公告