64bit 版の PopupMenu インターフェイス、Add メソッド動作について

  1. # 環境
    - Win 10 64bit
    - Mery Ver.2.6.7 64bit

    開発お疲れさまです。

    最近導入した下記のマクロの rev.8 が動作せず、何故だ何故だと唸っていたのですが、どうも 64bit 版 Mery でのみ起こる事象のようでした。

    行並べ替え
    https://www.haijin-boys.com/wiki/行並べ替え

    詳しく動きを見ていったところ、153-154 行目あたりで Add メソッドの Id で負の値を渡しているのですが、ここで動作が止まっているようでした。

    32bit 版だとこのマクロが想定通り動くので、64bit 版とは Add メソッドの動きが異なるようです。

    とりあえず正の値で使うようにマクロを微修正してしまえばいいので気にならないといえば気にならないのですが、時間のあるときにでもご確認いただければと思います。

     |  yuko  |  返信
  2. 書き込みありがとうございます。

    > 32bit 版だとこのマクロが想定通り動くので、64bit 版とは Add メソッドの動きが異なるようです。

    確認してみましたところ、Add メソッドの引数は UINT_PTR (Delphi の NativeUInt) でした。MeryWiki のマクロリファレンスでは int って書いてありますけど間違いです。

    Add メソッドは単純に Windows API の AppendMenu を呼び出しており、AppendMenu の引数は UINT_PTR なので正の値のみで、_PTR なので 32 ビット版と 64 ビット版では挙動が異なって正解です。

    負の値でも動いていたのはたまたまですね… ^^;
    マクロリファレンスの修正と、行並べ替えマクロのページの裏にコメントでも書いておきますー。

     |  Kuro  |  返信
  3. ご返信ありがとうございます!

    > 負の値でも動いていたのはたまたまですね… ^^;

    おう…見てはいけないものを見てしまったようですね…闇の組織に消される前に退散したいと思いますw

    ご確認ありがとうございました。お手数おかけしました。

     |  yuko  |  返信
  4. コメント拝見しましたー。おぅふ……負の値でも動くみたい、と採用したのが裏目に出ましたね……。
    「行並べ替え」マクロについては取り急ぎ修正版 rev.9 を上げました。
    負の値を用いているのは rev.8 のみなので、過去版を含む他の自作マクロには影響ないのが幸いでしょうか。

     |  masme  |  返信
  5. 修正ありがとうございます、お手数をおかけしました。

    PopupMenu の Add だけは引数が特殊だったようで、32 ビットと 64 ビットで挙動が異なる型になっていました。(マイクロソフトがね!)

    調査してみましたところ、Mery 的にそのような引数を取るメソッドは、その他の部分においては、ありませんでした。

    Mery 側でなんとか 32 ビットと同じ挙動に合わせる方法を模索してみたのですが、どうにも自信がないので、やはり Add メソッドの引数は正の整数を使ってくださいという仕様でフィックスしたいと思います ^^;

     |  Kuro  |  返信
  6. Kuro さん、masme さん

    調査、そしてマクロ修正ありがとうございました!

    皆さまのおかげで引き続き快適な Mery ライフが送れそうですw

    今後ともよろしくお願いいたします。

     |  yuko  |  返信
スポンサーリンク