none
MSDNのヘルプ(EventLog.WriteEntry)について RRS feed

  • 質問

  • MSDNの日本語サイトのEventLog.WriteEntryのページ
    (http://msdn.microsoft.com/ja-jp/library/xzwc042w(v=vs.80).aspx)には、
    例外セクションに「メッセージ文字列が32766バイトを超えています。」と書かれていますが、
    これはバイト数ではなく文字数の誤りでしょうか?

    こちらで確認した所、32766文字(65532バイト)を超えた場合にArgumentExceptionが発生します。
    なお、Win32APIのReportEvent関数の英語サイト
    (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363679(v=vs.85).aspx)には、
    bytesではなくcharactersと書かれています。以下のように書かれており、
    --------------------
    A pointer to a buffer containing an array of null-terminated strings that are merged into the message before Event Viewer displays the string to the user. This parameter must be a valid pointer (or NULL), even if wNumStrings is zero. Each string is limited to 31,839 characters.
    --------------------

    以上、よろしくお願いします。
    2013年4月19日 1:37

回答

  • mickey0607 さん

    Win7 (32bit), VS2010の環境で、例外のメッセージを出力すると、以下のように表示されました。

    32,766文字と表示されていますし、MSDNの誤りのようなです。

    英語では、1文字=1byte (文字コードによりますが・・)ですので、日本語にそのまま自動翻訳した結果でしょうか?

    また、引用されている英文では31,839 となっていますが、.NET Framework のバージョンによって異なるようです。

    .NET Framework 4.5 の場合 http://msdn.microsoft.com/ja-jp/library/vstudio/xzwc042w(v=vs.110).aspx



    • 編集済み kentahoga 2013年4月19日 2:45
    • 回答としてマーク mickey0607 2013年4月19日 10:13
    2013年4月19日 2:40
  • kentaro_さん

    ありがとうございます。

    仰る通り、私も自動翻訳した結果かなと思っています。

    ただ、英語圏でも.NETのstring型はUnicode(UTF16)で1文字=2byteだと思いますので、

    英語サイトの方も間違っているのかなと思っています。

    なお、私の環境で動作検証した結果、OSによって文字列の長さが異なりました。

    .NET

    OS

    bit

    バイト上限(ソース名+メッセージ)

    バイト上限(メッセージのみ)

    2.0

    XP

    32bit

    65532バイト

    3.5

    XP

    32bit

    65532バイト

    4.5

    XP

    32bit

    65532バイト

    2.0

    Vista

    32bit

    63786バイト

    3.5

    Vista

    32bit

    63786バイト

    4.5

    Vista

    32bit

    63786バイト

    2.0

    Win7

    32bit

    63824バイト

    3.5

    Win7

    32bit

    63824バイト

    4.5

    Win7

    32bit

    63824バイト

    2.0

    Win7

    64bit

    63788バイト

    3.5

    Win7

    64bit

    63788バイト

    4.5

    Win7

    64bit

    63788バイト

    2.0

    Win8

    32bit

    63824バイト

    3.5

    Win8

    32bit

    63824バイト

    4.5

    Win8

    32bit

    63824バイト

    2.0

    Win8

    64bit

    63780バイト

    3.5

    Win8

    64bit

    63780バイト

    4.5

    Win8

    64bit

    63780バイト

    XP以外は、32766文字入力できず、上限もバラバラでした。

    上記表のバイト数~65532バイト(32766文字)の間の文字数で書き込みを行った場合

    別のエラーメッセージが表示されました。(また、たまにイベントログが壊れることもありました。)

    以上の事から、MSDNの32766バイトを単純に文字数と考えても上手くいかなそうです。


    kentaro_さんアドバイス頂きありがとうございました。

    • 回答としてマーク mickey0607 2013年4月19日 10:13
    2013年4月19日 10:12

すべての返信

  • mickey0607 さん

    Win7 (32bit), VS2010の環境で、例外のメッセージを出力すると、以下のように表示されました。

    32,766文字と表示されていますし、MSDNの誤りのようなです。

    英語では、1文字=1byte (文字コードによりますが・・)ですので、日本語にそのまま自動翻訳した結果でしょうか?

    また、引用されている英文では31,839 となっていますが、.NET Framework のバージョンによって異なるようです。

    .NET Framework 4.5 の場合 http://msdn.microsoft.com/ja-jp/library/vstudio/xzwc042w(v=vs.110).aspx



    • 編集済み kentahoga 2013年4月19日 2:45
    • 回答としてマーク mickey0607 2013年4月19日 10:13
    2013年4月19日 2:40
  • kentaro_さん

    ありがとうございます。

    仰る通り、私も自動翻訳した結果かなと思っています。

    ただ、英語圏でも.NETのstring型はUnicode(UTF16)で1文字=2byteだと思いますので、

    英語サイトの方も間違っているのかなと思っています。

    なお、私の環境で動作検証した結果、OSによって文字列の長さが異なりました。

    .NET

    OS

    bit

    バイト上限(ソース名+メッセージ)

    バイト上限(メッセージのみ)

    2.0

    XP

    32bit

    65532バイト

    3.5

    XP

    32bit

    65532バイト

    4.5

    XP

    32bit

    65532バイト

    2.0

    Vista

    32bit

    63786バイト

    3.5

    Vista

    32bit

    63786バイト

    4.5

    Vista

    32bit

    63786バイト

    2.0

    Win7

    32bit

    63824バイト

    3.5

    Win7

    32bit

    63824バイト

    4.5

    Win7

    32bit

    63824バイト

    2.0

    Win7

    64bit

    63788バイト

    3.5

    Win7

    64bit

    63788バイト

    4.5

    Win7

    64bit

    63788バイト

    2.0

    Win8

    32bit

    63824バイト

    3.5

    Win8

    32bit

    63824バイト

    4.5

    Win8

    32bit

    63824バイト

    2.0

    Win8

    64bit

    63780バイト

    3.5

    Win8

    64bit

    63780バイト

    4.5

    Win8

    64bit

    63780バイト

    XP以外は、32766文字入力できず、上限もバラバラでした。

    上記表のバイト数~65532バイト(32766文字)の間の文字数で書き込みを行った場合

    別のエラーメッセージが表示されました。(また、たまにイベントログが壊れることもありました。)

    以上の事から、MSDNの32766バイトを単純に文字数と考えても上手くいかなそうです。


    kentaro_さんアドバイス頂きありがとうございました。

    • 回答としてマーク mickey0607 2013年4月19日 10:13
    2013年4月19日 10:12