0

多くの .cpp ファイルを含むプロジェクトがあります。これらのファイルの中には、wchar_t モードで pugixml を使用する必要があるものもあれば、通常モードで char と pugixml を使用して既に実装されているものもあります。私は定義を使用しなければならないことを知っています

#define PUGIXML_WCHAR_MODE

wchar_t モードを使用するファイルでこのようにしようとすると:

#define PUGIXML_WCHAR_MODE
*some code*
#undef

リンクエラーが発生します。私は何を間違っていますか?

4

1 に答える 1

1

pugixml は、このように動作するようには設計されていません。理想的には、コンパイル フラグの 1 つの組み合わせを使用するようにコードを変更してみることができます (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"

それだけです。

于 2013-01-15T05:39:45.310 に答える