在wchar_t模式下以普通模式在一个项目中使用pugixml

时间:2013-01-15 00:07:23

标签: c++ xml pugixml

我有一个包含许多.cpp文件的项目。在其中一些文件中,我需要在wchar_t模式下使用pugixml,其中一些已经在常规模式下使用char和pugixml实现。 我知道我必须使用定义

#define PUGIXML_WCHAR_MODE

当我尝试在使用wchar_t模式的文件中执行此操作时:

#define PUGIXML_WCHAR_MODE
*some code*
#undef

它给了我链接错误。我做错了什么?

1 个答案:

答案 0 :(得分:1)

pugixml不是以这种方式工作的。理想情况下,您可以尝试更改代码以使用一个编译标志组合(执行UTF-8< - > wchar_t转换的函数,pugi :: as_utf8和pugi :: as_wide,可能有帮助)。

有一种不受支持的方式可行,但不是特别漂亮 - 您可以为wchar配置重命名pugi命名空间。

要做到这一点,你必须创建一个特殊的标题,即pugixmlw.hpp,你将包括宽字符配置;此标题内容应大致如下:

#ifndef HEADER_PUGIXMLW_HPP
#define HEADER_PUGIXMLW_HPP

#define PUGIXML_WCHAR_MODE
#define pugi pugiw

#undef HEADER_PUGIXML_HPP
#undef HEADER_PUGICONFIG_HPP
#undef SOURCE_PUGIXML_CPP

#undef PUGIXML_TEXT
#undef PUGIXML_CHAR

#include "pugixml.hpp"

#undef PUGIXML_TEXT
#undef PUGIXML_CHAR

#undef HEADER_PUGIXML_HPP
#undef HEADER_PUGICONFIG_HPP
#undef SOURCE_PUGIXML_CPP

#undef pugi
#undef PUGIXML_WCHAR_MODE

#endif

如果您使用的是仅限标题的pugixml变体,那应该是它;如果您正在编译pugixml.cpp,则必须添加一个额外的源文件pugixmlw.cpp,其中包含以下内容:

#define PUGIXML_WCHAR_MODE    
#define pugi pugiw
#include "pugixml.cpp"

应该是它。