loaddll関数とウィンドウ切替No.05552
h-tom さん 10/04/13 20:32
 

h-tom です。

秀丸エディタ:Ver8.01β1
OS:Windows VistaSP2(32bit)

loaddll関数を使用後、ウィンドウを以下のように切り替えた場合、

 1)loaddll関数を実行した秀丸
  ↓
 2)新規秀丸
  ↓
 3)loaddll関数を実行した秀丸

3)で、「DLLがロードされてないのにdllfunc関数が使われました」と、エラー
になります。
loadll文では問題ないです。
また、ウィンドウを切り替えなければ、正常に動作します。

//ここから
#main = hidemaruhandle(0);
#fm = loaddll("HmExplorerPane.dll");
#ret = dllfunc(#fm, "SetMode", hidemaruhandle(0), 5);
//message getloaddllfile(#fm);
newfile;
message filetype;
#sub  = hidemaruhandle(0);
setactivehidemaru #main;
//message getloaddllfile(#fm);
closehidemaruforced #sub;
#ret = dllfunc(#fm, "GetMode", hidemaruhandle(0)); //ここでエラーになる。
message str(#ret);
endmacro;
//ここまで

[ ]
RE:05552 loaddll関数とウィンドウ切替No.05553
秀丸担当 さん 10/04/14 12:42
 

>3)で、「DLLがロードされてないのにdllfunc関数が使われました」と、エラー
>になります。
>loadll文では問題ないです。
>また、ウィンドウを切り替えなければ、正常に動作します。

手順通りにして確認することができました。
ありがとうございます。
確かにウィンドウが切り替わった場合は元のウィンドウ上ではマクロは終了した
とみなされてそのようになってしまっていました。
正式公開後に仕様が変わるのも良くないかもしれませんが、一時的に作業用のウ
ィンドウを作ることは良くあると思うので、V8.01で修正を検討させていただき
ます。

[ ]
RE:05553 loaddll関数とウィンドウ切替No.05554
h-tom さん 10/04/14 13:13
 

h-tom です。

>確かにウィンドウが切り替わった場合は元のウィンドウ上ではマクロは終了した
>とみなされてそのようになってしまっていました。
>正式公開後に仕様が変わるのも良くないかもしれませんが、一時的に作業用のウ
>ィンドウを作ることは良くあると思うので、V8.01で修正を検討させていただき
>ます。
そういえば、loaddll関数の有効範囲(?)って、気にしていませんでした。

freedllしなかった場合の、loaddll文/関数の有効範囲(?)は、こんな所ですよね?

loadll文
 ・別のloaddll文の実行か、loaddll文を実行したウィンドウが閉じられるまで。
  (ロードした秀丸エディタ内のみ)

loadll関数
 ・マクロ終了まで。(現状では、ウィンドウの切替も含む)
  (ロードしたマクロ内のみ)

[ ]
RE:05554 loaddll関数とウィンドウ切替No.05555
秀丸担当 さん 10/04/14 14:04
 

>freedllしなかった場合の、loaddll文/関数の有効範囲(?)は、こんな所ですよね?

現状ではそういうことで合っていると思います。
loaddll関数のほうはウィンドウ切り替えしても切り替え先のマクロが終了する
まで維持できるように検討させていただきます。

[ ]