У меня есть приложение 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 работать должным образом. Глупо с моей стороны.