如上所述,RtlStringCbPrintf不在ntstrsafe.h中

时间:2014-07-30 17:34:50

标签: c++ string unicode-string windows-kernel strsafe

我正在尝试将 RtlStringCbPrintf 与Winsock内核一起使用。我已经包含了Ntstrsafe.h但是编译器给了我错误

Error 4 error C3861: 'RtlStringCbPrintf': identifier not found  c:\bw\epic_sl\musslcomm\musslcomm\commmessenger\socketx.h   124 1   CommMessenger

如果我使用 RtlStringCbPrintfA RtlStringCbPrintfW ,那么它会进行编译。为什么我不能使用通用版本?查看Ntstrsafe.h我看到 RtlStringCbPrintfA RtlStringCbPrintfW 的原型声明,但没有 RtlStringCbPrintf 的声明,尽管注释引用它。为什么我不能使用通用表单,以便我的字符集属性选择使用哪个版本?我的字符集属性设置为使用多字节字符集

1 个答案:

答案 0 :(得分:3)

因为windows没有为这两个函数提供RtlStringCbPrintf定义。来自msdn:

  

使用RtlStringCbPrintfW来处理Unicode字符串和   RtlStringCbPrintfA来处理ANSI字符串。您使用的表单取决于   你的数据..

msdn的例子使用RtlStringCbPrintfW()函数,而不是Rtl​​StringCbPrintf()。

您可以自己定义RtlStringCbPrintf():

#if defined(UNICODE)
# define RtlStringCbPrintf RtlStringCbPrintfA
#else
# define RtlStringCbPrintf RtlStringCbPrintfW
#endif