Как инициализировать строку WCHAR из строки ascii, которая #defined. L префикс не включен - PullRequest
0 голосов
/ 20 апреля 2019

В коде драйвера C для Windows мне нужно установить массив WCHAR в строку, которая #defined определена в заголовочном файле.В заголовочном файле указана строка ascii.В ней не указывается префикс L для строки.

// In the header file
#define VERS_STR "3.2.4"

// In the C file, none of the following work
WCHAR awcStr[] = LVERS_STR;    // Compiler Error: Treated as one name
WCHAR awcStr[] = L VERS_STR;   // Compiler Error: L is unknown
WCHAR awcStr[] = L(VERS_STR);  // Compiler Error
WCHAR awcStr[] = L"3.2.4";     // Compiles and runs, but I must use #define instead

Я бы назвал процедуру преобразования в #define, но я не могу найти ту, которую можно вызвать из драйвера Windows с помощью кода C.

1 Ответ

2 голосов
/ 20 апреля 2019

Макрос WIDE может существовать, но я не там, где я могу легко проверить, но эта последовательность реализует его:

#define WIDE2(x) L##x
#define WIDE1(x) WIDE2(x)
#define WIDE(x) WIDE1(x)

Из-за того, как работают макросы, WIDE1 расширит ваш макрос, а WIDE2 добавит L с оператором макроса конкатенации. Просто позвоните WIDE(VERS_STR).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...