サードパーティのライブラリを使用するUnicode Win32アプリケーションがあります。その中には、バージョン情報の定数を狭い文字列として提供するものがあります。例えば、libpngは以下があります。文字列マクロ/定数をワイド文字に変換する/ Unicode
#define PNG_LIBPNG_VER_STRING "1.5.4"
#define PNG_HEADER_VERSION_STRING \
" libpng version 1.5.4 - July 7, 2011\n"
私は簡単にバージョンを追跡するためにボックスについて私に様々な静的にリンクされたライブラリのバージョン情報を付加していて、にこの定数を変換するのは簡単だろうと同じようには見えました広い弦。
私の最初の試みは、TEXT(PNG_HEADER_VERSION_STRING)だったが、それは
#define __TEXT(quote) L##quote
として失敗した...とLPNGHEADER_VERSION_STRINGはもちろん存在しません。
私はダブルラップマクロと、マクロの定数にLプレフィックスを追加しようとするすべての種類の##のトリックをいくつか組み合わせましたが、できませんでした。私は何か簡単なものを逃していますどのように対処します:
単に重複L「テストV1.2.3」を追加し、サードパーティのライブラリと同期してそれを維持することなく、プログラム#define VERSIONSTR "Test V1.2.3"
const char* ver= VERSIONSTR;
const wchar* wver = _T(VERSIONSTR); // fails, should be L"Test V1.2.3"
#define VERSIONSTRW _T(VERSIONSTR); // fails also
を、。
私はUnicodeのためにビルドしている場合、実行時に変換することができますが、確かにこの定数を再定義するための素早い方法があると思いました。
--- --- UPDATE
私は私が構造を含めて、本当に愚かな何かをすることによってプロットを逃しました。それを修正することで、double定義ラッパーが機能するようになりました。私の愚かな部分。
どのコンパイラを使用していますか? VC++ 2008で '#define VERSIONSTRW _T(VERSIONSTR)'が動作します。 – Tim
VS2003。私は古いことを知っていますが、現在は必要です。おそらく私のコンパイラのバグでしょうか? – CoreyStup