◀ANSI版開発トップへ
  • 1134 キーマクロの読込みでハング
    • 1137 Re: キーマクロの読込みでハング
      • 1139 Re2: キーマクロの読込みでハング
  • [1134] キーマクロの読込みでハング hor 2002年01月10日 17:15

    外部マクロファイルを編集(InsText追加)したあとに「キーマクロの読込み」を実行するとハングします。
    「登録済みマクロ」から呼び出すと正常に動くようなので、
    1/8版CKeyMacroMgr.cppの 211~241行を、CSMacroMgr.cppにあわせて
    以下ようにしたほうが良いと思うのですが、いかがでしょうか?

    // Skip Space
    while( szLine[i] == ' ' || szLine[i] == '\t' )
    i++;

    if( '\"' == szLine[i] ){
    ++i;
    nBgn = i;
    for( ; i < nLineLen; ++i ){
    if( szLine[i] == '\\' ){// エスケープシーケンスのスキップ
    ++i;
    continue;
    }
    if( szLine[i] == '\"' ){
    break;
    }
    }

    cmemWork.SetData( szLine + nBgn, i - nBgn );
    cmemWork.Replace( "\\\"", "\"" );
    cmemWork.Replace( "\\\\", "\\" );
    /* キーマクロのバッファにデータ追加 */
    Append( nFuncID, (LPARAM)cmemWork.GetPtr( NULL ) );
    • [1137] Re: キーマクロの読込みでハング げんた 2002年01月10日 21:22

      >外部マクロファイルを編集(InsText追加)したあとに「キーマクロの読込み」を実行するとハングします。
      既知のバグです。さぼってました。

      >1/8版CKeyMacroMgr.cppの 211~241行を、CSMacroMgr.cppにあわせて
      CSMacroMgr.cppではメモリを動的に確保しているのですが、CKeyMacroMgrでは共有メモリ上の限られたエリアにデータを入れる必要があるために文字列の分割を行おうとしているのです。(そしてバグってますが)

      ただこれが意味を持つのはINSTEXTだけなので、サイズを制限してそれ以上は受け付けなくなるようにすれば問題ないでしょう。
      • [1139] Re2: キーマクロの読込みでハング hor 2002年01月10日 23:50

        ▼ げんたさん
        > >1/8版CKeyMacroMgr.cppの 211~241行を、CSMacroMgr.cppにあわせて
        > CSMacroMgr.cppではメモリを動的に確保しているのですが、
        > CKeyMacroMgrでは共有メモリ上の限られたエリアにデータを入れる必要があるために
        > 文字列の分割を行おうとしているのです。(そしてバグってますが)

        ちゃんと見てませんでした・・・すいません、<1134>のロジックは忘れて下さい。

        InsTextだけじゃなくて、FileOpen,ExecCommand を含むマクロファイルも
        CKeyMacroMgrから実行しようとすると変な動きになります。