Преобразование строковых макросов / констант в широкие символы / Unicode

У меня есть приложение Unicode Win32, которое использует сторонние библиотеки, некоторые из которых предоставляют константы для информации о своей версии в виде #defined (узких) строк. Например, libpng имеет следующее:

#define PNG_LIBPNG_VER_STRING "1.5.4"
#define PNG_HEADER_VERSION_STRING \
 " libpng version 1.5.4 - July 7, 2011\n"

Я добавляю информацию о версии различных статически связанных библиотек в свой About Box для упрощения отслеживания версий, и казалось, что это будет просто преобразовать эту константу в широкую строку.

Моя первая попытка была 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" и необходимости синхронизировать его со сторонней библиотекой.

Я знаю, что могу просто преобразовать его во время выполнения, если я ' m для Unicode, но я подумал, что есть быстрый способ переопределить эту константу.

--- UPDATE ---

Я пропустил сюжет, сделав что-то действительно глупое со своей структурой include. Исправление, которое позволило оболочке double define работать должным образом. Глупо с моей стороны.

5
задан CoreyStup 14 July 2011 в 16:43
поделиться