环境:

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的更多相关文章

  1. C++ TinyXml操作(含源码下载)

      前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析X ...

  2. 【C/C++开发】TinyXml操作(含源码下载)

    前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手. 这个解析库的模型通过解析XM ...

  3. XML工程配置文件的读写

    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析XML文件, ...

  4. TinyXML2 使用

    TinyXML2 TinyXML2 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手. ...

  5. Linux环境g++编译TinyXML动态库

    除了CMarkup,tinyxml也是C/C++下解析XML很好的工具.在linux下用g++编译tinyxml的步骤如下(tinyxml版本2.6.2): 进入tinyxml解压目录,用文本编辑器打 ...

  6. 使用CMake在Linux下编译tinyxml静态库

    环境:CentOS6.6+tinyxml_2_6_21.下载并解压tinyxml_2_6_2.zip unzip tinyxml_2_6_2.zip 2.在tinyxml文件夹里创建一个CMakeLi ...

  7. Linux下编译tinyxml生成动态库

    首先去到sourceforge下载tinyxml的源码,https://sourceforge.net/projects/tinyxml/?source=dlp,最新版本是2.6.2. 将下载成功的t ...

  8. tinyXML的用法

    tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你 ...

  9. tinyxml一个优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

随机推荐

  1. [POJ] 1562 Oil Deposits (DFS)

    Oil Deposits Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16655   Accepted: 8917 Des ...

  2. 越狱开发-创建真正的后台程序(Daemon Process)

    在网上搜索了一下如何在IOS上面实现Daemon Process,只有chrisalvares的博客中有过详细的描述,但是其博客中描述的较为复杂, 参考stackoverflow中的一个问答: htt ...

  3. LeetCode OJ 45. Jump Game II

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  4. 1bpp像素遍历(找了半天,感谢github)

    /// <summary> /// 获取比例 /// </summary> /// <param name="rect"></param& ...

  5. HDtune(硬盘检测) V5.5 中文绿色版

    软件名称:HDtune(硬盘检测) V5.5 中文绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 565KB 图片预览: 软件简介:HD Tune Pro一 ...

  6. 实验六 多线程编程 1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

    //继承Thread类 package zuoye; //继承Thread类 public class City extends Thread{ private String name; public ...

  7. alertview 添加图片

    - (void)willPresentAlertView:(UIAlertView *)alertView { 在这个方法中, 绘制需要的东西 uiview *myView = [uiview all ...

  8. Quartz(任务调度)- job串行避免死锁

    参照:http://blog.csdn.net/haitaofeiyang/article/details/50737644 quartz框架中防止任务并行可以有两种方案:   1.如果是通过Meth ...

  9. 对端口Com1的访问被拒绝

    某项目中,需通过com口的方式读取CF卡的rfid,. 问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!): 断点 ...

  10. SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点

    mysql数据库表及数据准备语句: USE test; DROP TABLE IF EXISTS `teacher_table`; DROP TABLE IF EXISTS `student_tabl ...