如何从#defined的ascii字符串初始化WCHAR字符串。不包括L前缀

时间:2019-04-20 01:32:07

标签: unicode driver string-literals wchar

在Windows驱动程序C代码中,我需要将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上调用转换例程,但是找不到可以使用C代码从Windows驱动程序调用的转换例程。

1 个答案:

答案 0 :(得分:2)

可能存在一个WIDE宏,但我不在哪里可以轻松检查,但是此序列实现了它:

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

由于宏的工作方式,WIDE1将扩展宏,WIDE2将使用串联宏运算符添加L。只需致电WIDE(VERS_STR)