编译使用tinyxml

环境:

win7 32位旗舰版,VS2010,tinyxml_2_6_2版本

1、下载tinyxml,并解压到tinyxml文件夹下

 

2、生成动态链接库

原生的Tinyxml只支持静态库(没有在.h文件中找到任何的导出类或导出函数),并且生成的静态库比较大,Release下大约2.5M。

打开VS2010 -> 新建win32项目 -> 下一步 -> 勾选"DLL” ->  完成

将tinyxml文件夹下所有的.h/.cpp文件复制到改工程目录下

打开tinyxml.h头文件,定义以下宏

#define TIXML_USE_STL//使用STL
#define TIXML_DLL//DLL项目
#define TIXML_DLL_EXPORT//DLL导出

#ifdef TIXML_DLL


#ifdef TIXML_DLL_EXPORT

#define TIXML_DLL_API _declspec(dllexport)

#else

#define TIXML_DLL_API _declspec(dllimport)

#endif


#else


#define TIXML_DLL_API


#endif

在所有需要导出类前面加上TIXML_DLL_API宏

class TIXML_DLL_API TiXmlVisitor
{
};

class TIXML_DLL_API TiXmlNode : public TiXmlBase
{
};

class TIXML_DLL_API TiXmlAttribute : public TiXmlBase
{
};

class TIXML_DLL_API TiXmlAttributeSet
{
};

class TIXML_DLL_API TiXmlElement : public TiXmlNode

{
};

class TIXML_DLL_API TiXmlComment : public TiXmlNode
{
};

class TIXML_DLL_API TiXmlText : public TiXmlNode
{
};

class TIXML_DLL_API TiXmlDeclaration : public TiXmlNode
{
};

class TIXML_DLL_API TiXmlUnknown : public TiXmlNode
{
};

class TIXML_DLL_API TiXmlDocument : public TiXmlNode
{
};

class TIXML_DLL_API TiXmlHandle
{
};

class TIXML_DLL_API TiXmlPrinter : public TiXmlVisitor
{
};

为了在保存xml文件的时候为UTF-8编码,在TiXmlDocument类的三个构造函数中设置useMicrosoftBOM=true

TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )
{
	tabsize = 4;
	useMicrosoftBOM = true;//保存为UTF-8格式
	ClearError();
}

TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )
{
	tabsize = 4;
	useMicrosoftBOM = true;//保存为UTF-8格式
	value = documentName;
	ClearError();
}


#ifdef TIXML_USE_STL
TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT )
{
	tabsize = 4;
	useMicrosoftBOM = true;//保存为UTF-8格式
    value = documentName;
	ClearError();
}
#endif

编译生成Debug和Release,这里需要同时生成,我在上面的DLL导出函数接口中使用了非内置类型(如std::string等等),必须使用相同版本的lib和dll库,否则会出现莫名其妙的错误.

3、使用Tinyxml动态链接库

新建一个控制台应用程序

直接编译生成Debug和Release版本

将编译好的Debug下的tinyxml.lib和tinyxml.dll复制到当前工程下的Debug目录下

将编译好的Release下的tinyxml.lib和tinyxml.dll复制到当前工程下的Release目录下

#include "tinyxml.h"

//
//	由于DLL导出函数接口中使用了非内置类型(如std::string等等),必须使用相同版本
//	的lib和dll库,否则会出现莫名其妙的错误.
//
#ifdef _DEBUG
#pragma comment(lib, "../Debug/tinyxml.lib")
#else
#pragma comment(lib, "../Release/tinyxml.lib")
#endif

删除tinyxml.h头文件中定义的宏#define TIXML_DLL_EXPORT

下一章会说编码(UNICODE/UTF-8/ASCII)如何转换的问题,并以CMarkup的操作xml形式对Tinyxml进行封装,使用起来更加方便^^

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值