我正在尝试将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的声明。为什么不能使用通用形式,以便我的字符集属性选择要使用的版本?我的字符集属性设置为使用多字节字符集

最佳答案

因为Windows不提供RtlStringCbPrintf定义这两个功能。来自msdn:


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


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

您可以自己定义RtlStringCbPrintf():

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

关于c++ - RtlStringCbPrintf不在ntstrsafe.h中,如所述,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25043348/

10-11 00:42