◀Unicode版開発トップへ
  • 2104 タスクトレイのプロセスが異常終了します
    • 2106 Re:タスクトレイのプロセスが異常終了します
      • 2108 Re2:タスクトレイのプロセスが異常終了します
        • 2110 Re3:タスクトレイのプロセスが異常終了します
        • 2118 Re3:タスクトレイのプロセスが異常終了します
          • 2119 Re4:タスクトレイのプロセスが異常終了します
            • 2123 Re5:タスクトレイのプロセスが異常終了します
      • 2109 Re2:タスクトレイのプロセスが異常終了します
        • 2120 リクルート
          • 2121 Re:リクルート
            • 2126 Re2:リクルート
  • [2104] タスクトレイのプロセスが異常終了します LR4 2014年02月06日 19:28

    v2.1.1.0ですが、起動時にタスクトレイのプロセスが異常終了してしまうことがあります。
    自分の環境(Win7 Pro 32bit)では「アイコン付きメニュー」のON/OFF切替え後の再起動で異常終了することがありました。
    タスクトレイ常駐はOFFにしています。
    異常終了時のsakura.iniを見るとszLanguageDllに文字化けした長い文字列が入っていました。
    szLanguageDll=の行を削除するととりあえず正常起動しますが、設定変更後の全終了→再起動で同じように異常終了することがあります。

    直接の原因かわかりませんが、CShareData::InitShareData()でszLanguageDllが初期化されていないみたいな気がします。
    以下のような行の追加が必要なのではないでしょうか。
    m_pShareData->m_Common.m_sWindow.m_szLanguageDll[0] = _T('\0');
    • [2106] Re:タスクトレイのプロセスが異常終了します LR4 2014年02月06日 20:33

      今のところ、以下の手順でszLanguageDll行の文字化けは100%再現します。

      (1) sakura.iniを削除しておく
      (2) sakura.exeをダブルクリックで起動
      (3) [共通設定]-[ウィンドウ]-[アイコン付きメニュー]をOFFにする
      (4) [ファイル]-[サクラエディタの全終了]

      (4)の後、sakura.iniを別エディタで見るとszLanguageDllの行が文字化けしている。
      ただし、文字化けはしていても次回起動で異常終了しない場合もあります。

      > m_pShareData->m_Common.m_sWindow.m_szLanguageDll[0] = _T('\0');

      手元の環境で上記の行を追加してビルドしてみましたが、それでも改善しませんでした。orz
      他にも何か修正が必要なのでしょうか…
      • [2108] Re2:タスクトレイのプロセスが異常終了します novice 2014年02月06日 22:20

        ▼ LR4さん
        > 手元の環境で上記の行を追加してビルドしてみましたが、それでも改善しませんでした。orz
        > 他にも何か修正が必要なのでしょうか…

        SSelLangInfo構造体のメンバ変数szDllNameを初期化してないのが問題のようです。
        コンストラクタで下記のように初期化すればよさそうです。
        szDllName[0] = _T('\0');

        他のメンバ変数も初期化したほうがよさそうです。
        • [2110] Re3:タスクトレイのプロセスが異常終了します syat 2014年02月06日 23:01

          ▼ noviceさん
          ▼ LR4さん

          ちょっと心当たりがあったのでパッチを作成しました。
          https://sourceforge.net/p/sakura-editor/patchunicode/768/
          リリース前に余計なことをしたような…
        • [2118] Re3:タスクトレイのプロセスが異常終了します novice 2014年02月08日 00:22

          ▼ noviceさん
          > SSelLangInfo構造体のメンバ変数szDllNameを初期化してないのが問題のようです。
          > コンストラクタで下記のように初期化すればよさそうです。
          > szDllName[0] = _T('\0');
          >
          > 他のメンバ変数も初期化したほうがよさそうです。

          少し調べてみました。
          SSelLangInfo構造体は、POD型なので
          new SSelLangInfo();
          のように括弧を付けるとゼロで初期化されるようです。
          new SSelLangInfo;
          だとゼロで初期化されないので文字化けします。

          http://msdn.microsoft.com/ja-jp/library/80ks028k%28v=vs.90%29.aspx

          古いコンパイラ(2003)でもゼロで初期化されました。
          • [2119] Re4:タスクトレイのプロセスが異常終了します syat 2014年02月08日 11:29

            build_config.h にある USE_LEAK_CHECK_WITH_CRTDBG を使用すると、
            「warning C4345: 動作変更 : 形式 () の初期化子で構築される POD 型のオブジェクトは既定初期化されます。」
            という警告が出るのを解消したかったのです。

            http://d.hatena.ne.jp/hiiragi_corona/20120618/1340012843
            こちらを見ると、①警告を無視する、②クラスにする、③コンストラクタ呼ばないのどれかということなので、③をやろうとしましたがNGでした。
            とりあえず無視してよい警告のようなので修正を戻しました。
            • [2123] Re5:タスクトレイのプロセスが異常終了します novice 2014年02月08日 14:02

              ▼ syatさん
              > build_config.h にある USE_LEAK_CHECK_WITH_CRTDBG を使用すると、
              > 「warning C4345: 動作変更 : 形式 () の初期化子で構築される POD 型のオブジェクトは既定初期化されます。」
              > という警告が出るのを解消したかったのです。

              自分もUSE_LEAK_CHECK_WITH_CRTDBGは有効にしていて、コンパイル時にC4345が表示されていたので気にはなっていたのですが、POD型の意味がよく分からずにほったらかしてました。
              (そういう経緯があったので、少し調べてみました)

              参考までに、もっと古いコンパイラ(VC6)だとゼロで初期化されませんでした。
      • [2109] Re2:タスクトレイのプロセスが異常終了します LR4 2014年02月06日 22:32

        > > m_pShareData->m_Common.m_sWindow.m_szLanguageDll[0] = _T('\0');

        上記の修正に加えて、CSelectLang::InitializeLanguageEnvironm
        ent()内に、
        psLangInfo->szDllName[0] = _T('\0');
        の行を追加したら文字化けしなくなりました。

        正しい対処かわかりませんが、ご確認願います。
        • [2120] リクルート syat 2014年02月08日 11:48

          ▼ LR4さん

          スレッドの趣旨と関係ないのですが、掲示板で名前をお見かけするので、開発メンバーになりませんか?
          管理掲示板とかでSourceforgeアカウントを名乗っていただければコミット権限をつけます。

          アクティブメンバー数維持のため最近活動している方に声かけ中です。Wikiでも みけCATさんに勧誘コメントを残しました。
          他の方も、ちょっと手伝ってもよいとか、やってみたい事がある、という方を歓迎しますので、管理掲示板で名乗ってください。
          イタズラ目的でないと判断できたら権限を付けます。

          以上リクルートでした。
          • [2121] Re:リクルート LR4 2014年02月08日 13:11

            ▼ syatさん
            お誘いいただけて光栄ですが、今回は遠慮させていただきます。
            お役に立ちたくても能力足りてないですし、”修業中”ってことでお願いします。
            (^^;;;
            • [2126] Re2:リクルート syat 2014年02月09日 09:25

              ▼ LR4さん
              そうですか。気が向いたらいつでもどうぞ^^