У меня есть приложение 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" и необходимости его синхронизации с сторонней библиотекой.
Я знаю, что могу просто преобразовать его во время выполнения, если я создаю для Unicode, но я, конечно, подумал, что есть быстрый способ переопределить эту константу.
--- UPDATE ---
Я пропустил сюжет, делая что-то действительно глупое с моей структурой включения. Исправление, которое позволило оболочке с двойным определением функционировать так, как должно. Глупо с моей стороны.