0

Winsock Kernel でRtlStringCbPrintfを使用しようとしています。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 を見ると、RtlStringCbPrintfARtlStringCbPrintfWのプロトタイプ宣言が表示されますが、コメントでは参照されていますが、RtlStringCbPrintfの宣言はありません。Character Set プロパティが使用するバージョンを選択するように汎用フォームを使用できないのはなぜですか? My Character Set プロパティがUse Multi-Byte Character Set に設定されている

4

1 に答える 1

3

Windows では、この 2 つの関数の RtlStringCbPrintf 定義が提供されていないためです。msdn から:

RtlStringCbPrintfW を使用して Unicode 文字列を処理し、RtlStringCbPrintfA を使用して ANSI 文字列を処理します。使用するフォームは、データによって異なります。

msdn の例では、RtlStringCbPrintf() ではなく、RtlStringCbPrintfW() 関数を使用しています。

RtlStringCbPrintf() を自分で定義できます。

#if defined(UNICODE)
# define RtlStringCbPrintf RtlStringCbPrintfA
#else
# define RtlStringCbPrintf RtlStringCbPrintfW
#endif
于 2014-07-30T18:10:05.803 に答える