Unicode 如何从定义的ascii字符串初始化WCHAR字符串。不包括L前缀

Unicode 如何从定义的ascii字符串初始化WCHAR字符串。不包括L前缀,unicode,driver,string-literals,wchar,Unicode,Driver,String Literals,Wchar,在Windows驱动程序C代码中,我需要将WCHAR数组设置为头文件中定义的字符串。头文件指定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

在Windows驱动程序C代码中,我需要将WCHAR数组设置为头文件中定义的字符串。头文件指定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驱动程序调用的例程。

可能存在一个宽宏,但我不在可以轻松检查的地方,但这个序列实现了它:

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

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

可能存在一个宽宏,但我不在可以轻松检查的地方,但这个序列实现了它:

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

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

这让我朝着正确的方向开始。它需要两个级别的宏才能让预处理器以我需要的方式处理事情。我刚刚在我的文件中添加了#defines,效果很好,但是这些宏有标准的Windows/C包含文件吗?我找不到它。这让我朝着正确的方向开始了。它需要两个级别的宏才能让预处理器以我需要的方式处理事情。我刚刚在我的文件中添加了#defines,效果很好,但是这些宏有标准的Windows/C包含文件吗?我找不到它。