64bit版のhmjre.dllをマクロで利用するとNo.26772
m3snow さん 09/06/29 23:54
 
こんにちは、いつも秀丸エディタを愛用させて頂いています。

64bit版秀丸エディタのhmjre.dllをマクロで利用すると、復帰値の-1が4294967295(0
xffffffff)となってしまいます。

例えば、64bit版秀丸エディタで、次のif文を実行すると、正規表現にマッチしない
場合でも復帰値が4294967295となるため、必ず、trueになってしまい、意図した動作
をしません。

if (dllfunc("FindRegular", $$regexp, $$1, 0) > -1)

動作環境の64bit版の設定で、32bit版との互換、32bit DLLをマクロのloaddllで動作
可能にする は、OFFにしてあります。

#32bit版との互換で、32bit DLLをマクロのloaddllで動作可能にするをONにしても
#この動作は変わりませんでした。

動作を確認した環境は。秀丸エディタ64 V7.10 です。

よろしくお願いします。

[ ]
RE:26772 64bit版のhmjre.dllをマクロで利No.26773
秀丸担当 さん 09/06/30 14:42
 
64bit版でHmJre.dllのdllfuncを調べてみたところ、確かに言われている通りに
なりました。
詳細なご指摘ありがとうございます。
本体のdllfuncのビット幅とDLL側のビット幅が合わないためのバグでした。
申し訳ありません。
64bit版用にHmJre.dllの修正版だけを先行して公開させていただきました。
以下の場所からダウンロードできます。

 http://hide.maruo.co.jp/software/hidemaru64.html

秀丸エディタ本体には、少なくともV8.00では反映させていただきます。
V7.12は出すかどうかは未定ですが、もし出す場合はそちらでも修正させていた
だきます。


現状のまま回避するとしたら、もしマクロを書き換えてもよろしければ、
dllfuncを呼び出している箇所を以下のような感じにしておくと32bit/64bit両
バージョンで回避できるかもしれません。

#dllfunc = dllfunc("FindRegular", … );
if ( #dllfunc >= 0 && #dllfunc <= 0x7fffffff ) {
 //成功
} else {
 //失敗
}

[ ]