サードパーティのライブラリを使用するUnicodeWin32アプリケーションがあります。その一部は、バージョン情報の定数を#defined(狭い)文字列として提供します。たとえば、libpngには次のものがあります。
#define PNG_LIBPNG_VER_STRING "1.5.4"
#define PNG_HEADER_VERSION_STRING \
" libpng version 1.5.4 - July 7, 2011\n"
静的にリンクされたさまざまなライブラリのバージョン情報をAboutBoxに追加して、バージョンを簡単に追跡できるようにしています。この定数を幅の広い文字列に変換するのは簡単なようです。
私の最初の試みはTEXT(PNG_HEADER_VERSION_STRING)でしたが、それは次のように失敗します。
#define __TEXT(quote) L##quote
..そしてLPNGHEADER_VERSION_STRINGはもちろん存在しません。
そこで、ダブルラッピングマクロのいくつかの組み合わせと、マクロ化された定数にLプレフィックスを追加するためのあらゆる種類の##トリックを試しましたが、できませんでした。私は何か簡単なものが欠けていますか?どのように処理しますか:
#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
プログラム的に、重複するL "Test V1.2.3"を追加するだけでなく、サードパーティのライブラリとの同期を維持する必要もありません。
Unicode用にビルドしている場合は、実行時に変換できることはわかっていますが、この定数を再定義する簡単な方法があると確信していました。
- -アップデート - -
インクルード構造で本当に愚かなことをして、プロットを逃しました。二重定義ラッパーが正常に機能できるように修正しました。私の側では愚かです。