◀Unicode版開発トップへ
  • 1655 マクロ実行でクラッシュする
    • 1656 Re:マクロ実行でクラッシュする
      • 1657 Re2:マクロ実行でクラッシュする
        • 1663 Re3:マクロ実行でクラッシュする
  • [1655] マクロ実行でクラッシュする ryoji 2011年09月28日 22:17

    ふぁんくらぶ part14 の 772 で報告されている
    下記マクロでクラッシュする件ですが、

    if(Editor.GetFilename != "")
    new ActiveXObject("Shell.Application").Open
    (new ActiveXObject("Scripting.FileSystemObject")
    .GetParentFolderName(Editor.GetFilename));

    クラッシュ箇所は CWSHIfObj.cpp(103) の memcpy() のようです。

    101: // 2011.3.18 syat 引数の順序を正しい順にする
    102: VARIANTARG rgvargBak[4];
    *103: memcpy( rgvargBak, Arguments->rgvarg, sizeof(VARIANTARG) * 4 );
    104: for(I = 0; I < ArgCount; I++){
    105: Arguments->rgvarg[ArgCount-I-1] = rgvargBak[I];
    106: }

    Arguments->rgvargをオーバーランアクセスしているのかな?
    第3引数で指定されている 4 を ArgCount にするのが正解?
    • [1656] Re:マクロ実行でクラッシュする syat 2011年10月01日 12:11

      ▼ ryojiさん
      > Arguments->rgvargをオーバーランアクセスしているのかな?
      > 第3引数で指定されている 4 を ArgCount にするのが正解?
      なるほど。不要にアクセスしてますね。というかアクセスしては駄目なんですね。
      解析ありがとうございます。
      rev1958で修正をコミットしました。
      • [1657] Re2:マクロ実行でクラッシュする もか 2011年10月04日 14:23

        そういえば昔からおかしかったのですが、マクロに引数が5個以上書かれている場合はどうなるんでしょう?
        • [1663] Re3:マクロ実行でクラッシュする syat 2011年10月18日 23:55

          ▼ もかさん
          > そういえば昔からおかしかったのですが、マクロに引数が5個以上書かれている場合はどうなるんでしょう?
          返信おそくてすみません。

          ArgCountが5以上だと強制的に4に書きかえているので、後ろから最大4個の引数しか認識されません。
          例)引数6コ
          InsText('1', '2', '3', '4', '5', '6')
          → InsText('3', '4', '5', '6') と同じ動き

          マクロ関数の引数は今のところ4引数までなので、実害ないですが、
          ArgCountは変えずに、参照するときの添え字をやりくりする方が仕様的にしっくりすると思います。