我正在尝试将 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 的声明,尽管注释引用它。为什么我不能使用通用表单,以便我的字符集属性选择使用哪个版本?我的字符集属性设置为使用多字节字符集
答案 0 :(得分:3)
因为windows没有为这两个函数提供RtlStringCbPrintf定义。来自msdn:
使用RtlStringCbPrintfW来处理Unicode字符串和 RtlStringCbPrintfA来处理ANSI字符串。您使用的表单取决于 你的数据..
msdn的例子使用RtlStringCbPrintfW()函数,而不是RtlStringCbPrintf()。
您可以自己定义RtlStringCbPrintf():
#if defined(UNICODE)
# define RtlStringCbPrintf RtlStringCbPrintfA
#else
# define RtlStringCbPrintf RtlStringCbPrintfW
#endif