编译使用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进行封装,使用起来更加方便^^
编译使用tinyxml的更多相关文章
- C++ TinyXml操作(含源码下载)
前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析X ...
- 【C/C++开发】TinyXml操作(含源码下载)
前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手. 这个解析库的模型通过解析XM ...
- XML工程配置文件的读写
TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析XML文件, ...
- TinyXML2 使用
TinyXML2 TinyXML2 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手. ...
- Linux环境g++编译TinyXML动态库
除了CMarkup,tinyxml也是C/C++下解析XML很好的工具.在linux下用g++编译tinyxml的步骤如下(tinyxml版本2.6.2): 进入tinyxml解压目录,用文本编辑器打 ...
- 使用CMake在Linux下编译tinyxml静态库
环境:CentOS6.6+tinyxml_2_6_21.下载并解压tinyxml_2_6_2.zip unzip tinyxml_2_6_2.zip 2.在tinyxml文件夹里创建一个CMakeLi ...
- Linux下编译tinyxml生成动态库
首先去到sourceforge下载tinyxml的源码,https://sourceforge.net/projects/tinyxml/?source=dlp,最新版本是2.6.2. 将下载成功的t ...
- tinyXML的用法
tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你 ...
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
随机推荐
- [POJ] 1562 Oil Deposits (DFS)
Oil Deposits Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16655 Accepted: 8917 Des ...
- 越狱开发-创建真正的后台程序(Daemon Process)
在网上搜索了一下如何在IOS上面实现Daemon Process,只有chrisalvares的博客中有过详细的描述,但是其博客中描述的较为复杂, 参考stackoverflow中的一个问答: htt ...
- LeetCode OJ 45. Jump Game II
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 1bpp像素遍历(找了半天,感谢github)
/// <summary> /// 获取比例 /// </summary> /// <param name="rect"></param& ...
- HDtune(硬盘检测) V5.5 中文绿色版
软件名称:HDtune(硬盘检测) V5.5 中文绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 565KB 图片预览: 软件简介:HD Tune Pro一 ...
- 实验六 多线程编程 1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
//继承Thread类 package zuoye; //继承Thread类 public class City extends Thread{ private String name; public ...
- alertview 添加图片
- (void)willPresentAlertView:(UIAlertView *)alertView { 在这个方法中, 绘制需要的东西 uiview *myView = [uiview all ...
- Quartz(任务调度)- job串行避免死锁
参照:http://blog.csdn.net/haitaofeiyang/article/details/50737644 quartz框架中防止任务并行可以有两种方案: 1.如果是通过Meth ...
- 对端口Com1的访问被拒绝
某项目中,需通过com口的方式读取CF卡的rfid,. 问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!): 断点 ...
- SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点
mysql数据库表及数据准备语句: USE test; DROP TABLE IF EXISTS `teacher_table`; DROP TABLE IF EXISTS `student_tabl ...