11

英語のみの値を取得するためにフォーマットメッセージを使用しようとしています

MSDNは次のように指定しています

DWORD WINAPI FormatMessage(
  _In_      DWORD dwFlags,
  _In_opt_  LPCVOID lpSource,
  _In_      DWORD dwMessageId,
  _In_      DWORD dwLanguageId,
  _Out_     LPTSTR lpBuffer,
  _In_      DWORD nSize,
  _In_opt_  va_list *Arguments
);

dwLanguageIdパラメーターの場合、

要求されたメッセージの言語識別子。dwFlagsにFORMAT_MESSAGE_FROM_STRINGが含まれている場合、このパラメーターは無視されます。

このパラメーターで特定のLANGIDを渡すと、FormatMessageはそのLANGIDのメッセージのみを返します。関数がそのLANGIDのメッセージを見つけることができない場合、Last-ErrorをERROR_RESOURCE_LANG_NOT_FOUNDに設定します。ゼロを渡すと、FormatMessageは次の順序でLANGIDのメッセージを検索します。

  1. 言語中立
  2. スレッドのロケール値に基づくスレッドLANGID
  3. ユーザーのデフォルトのロケール値に基づくユーザーのデフォルトのLANGID
  4. システムのデフォルトのロケール値に基づくシステムのデフォルトのLANGID
  5. アメリカ英語

FormatMessageは、先行するLANGIDのいずれのメッセージも検出しない場合、存在する言語メッセージ文字列を返します。それが失敗した場合は、ERROR_RESOURCE_LANG_NOT_FOUNDを返します。

これは、パス値が5の場合、英語でメッセージを返すことを意味しますか?

これを明確にしていただけますか?

4

1 に答える 1

13

ドキュメントの数字5はFormatMessage、前の4つのオプションを試し、失敗した後、パラメーター値としてゼロを渡したときに、米国英語が5番目の言語として使用しようとすることを示しています。5これは、その関数パラメーターの値を渡すこととは何の関係もありません。

英語のメッセージをリクエストするには、USEnglishのLANGID値を渡します。これは。で取得できますMAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)ドキュメントは言語識別子に関するドキュメントにリンクFormatMessageしており、言語識別子は言語識別子の定数と文字列のページにリンクしています。

于 2012-10-03T20:07:55.830 に答える