こういうコードを書いたとき、38ってWindows SDKのどこかで#defineされていないの?と疑問に思いました。

#include <iostream>
#include <windows.h>
 
int main()
{
  // {00000000-0000-0000-0000-000000000000}
  GUID guid = GUID_NULL;
 
  WCHAR s[39]; // ← これ!!!39ってみんな書くでしょ
 
  StringFromGUID2(guid, s, ARRAYSIZE(s));
  std::wcout << s << std::endl;
}

というわけで、grepしたところ以下のものが見つかりました。

  • axcore.idl:#define CHARS_IN_GUID 39
  • cfgmgr32.h:#define MAX_GUID_STRING_LEN 39
  • strmif.h:#define CHARS_IN_GUID 39
  • Msi.h:#define MAX_GUID_CHARS 38

38なのは、最後のヌル文字を含まない場合ですね。

いずれも、<windows.h>などからインクルードされるものではありません。なので、いつでも使おうと無条件に言える感じがしませんが、気が向いたら使ってみてはどうでしょうか、と締めてみます。

スポンサード リンク

この記事のカテゴリ

  • ⇒ GUIDの文字列表現の文字数のための定数
  • ⇒ GUIDの文字列表現の文字数のための定数