zoukankan      html  css  js  c++  java
  • 编译使用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进行封装,使用起来更加方便^^

  • 相关阅读:
    NetStat
    Linux远程目录挂载
    Mysql服务彪高排查方式及索引的正确使用步骤
    Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令
    防止sql注入的最好方式
    Fortify---Detail--Sql注入
    百亿级数据处理优化
    半年的总结和思考,继续前行
    Protoc Buffer 优化传输大小的一个细节
    RPC
  • 原文地址:https://www.cnblogs.com/dongc/p/5225122.html
Copyright © 2011-2022 走看看