我有一個使用第三方庫的Unicode Win32應用程序,其中一些庫爲其版本信息提供了常量作爲#defined(narrow)字符串。例如,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前綴添加到一個宏觀常量,但無法實現。我錯過了一些簡單的東西嗎你會如何處理:
#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「V1.2.3測試」,並具有與第三方庫保持同步。
我知道我可以在運行時將其轉換,如果我爲Unicode構建,但我確信有一個快速的方法來重新定義這個常量。
--- UPDATE ---
我錯過了做一些非常愚蠢的我包括結構的情節。解決這個問題可以讓雙重定義包裝器正常工作。我的愚蠢。
你使用什麼編譯器? '#define VERSIONSTRW _T(VERSIONSTR)'在VC++ 2008中適用於我。 – Tim
VS2003。我知道它的舊,但它目前需要。也許它只是我的編譯器中的一個錯誤? – CoreyStup