DLLがloadされているかどうかの確認方法No.09023
colder さん 16/08/26 13:52
 
colderです。
秀丸ver8.66β1を入れたところ、今まで動いていたマクロが動かなくなりました。
同じDLLを複数回loadしていて一方をfreedllしていることが問題でした。
以下に再現用のマクロです。
//test.mac
#r = loaddll("hmjre.dll");
execmacro "test1.mac";
#s = dllfunc(#r, "Fuzzy_OptionDialog",hidemaruhandle(0));
freedll #r;

//test1.mac
#x = loaddll("hmjre.dll");
freedll #x;

そこで質問なのですが、マクロでDLLがloadされているかどうかを確認する方法はな
いでしょうか?


[ ]
RE:09023 DLLがloadされているかどうかのNo.09026
秀丸担当 さん 16/08/26 14:28
 

setdlldetachfuncの関係で同じDLLはまとめて管理する必要性があって、内部的
な仕組みを変えたのですが、同じDLLを想定してカウント増減させてできるはず
だったのですが、全然動いていませんでした。
早いうちに修正する予定で一緒に修正させていただきます。

既にロードされているかどうかを確認する方法はないです。
一応次の修正でできるようになるとは思いますが、もし必要であれば考えます。

[ ]
RE:09023 DLLがloadされているかどうかのNo.09034
IKKI さん 16/08/27 00:20
 
>そこで質問なのですが、マクロでDLLがloadされているかどうかを確認する方法はな
>いでしょうか?

loaddllfile で分かるはずです。(よね? > 秀丸担当さん)

[ ]
RE:09026 DLLがloadされているかどうかのNo.09035
colder さん 16/08/27 02:50
 
>
>setdlldetachfuncの関係で同じDLLはまとめて管理する必要性があって、内部的
>な仕組みを変えたのですが、同じDLLを想定してカウント増減させてできるはず
>だったのですが、全然動いていませんでした。
>早いうちに修正する予定で一緒に修正させていただきます。
秀丸ver8.66β2を入れたところ複数のDLLを利用しているマクロが動かなくなりました。
freedllで指定していないDLLも解放されいるような感じです。
//再現用マクロ
#jre = loaddll("hmjre.dll");
#onig = loaddll("hmonig.dll");
freedll #onig;
#d = dllfunc(#jre, "Fuzzy_OptionDialog", hidemaruhandle(0));
freedll #jre;

[ ]
RE:09035 DLLがloadされているかどうかのNo.09037
秀丸担当 さん 16/08/29 11:22
 

ご指摘ありがとうございます。その通りでした。
何度もすみません。
また次のβ版で修正させていただきます。

[ ]
RE:09034 DLLがloadされているかどうかのNo.09038
秀丸担当 さん 16/08/29 11:25
 

loaddllfileは、今読み込んでいるDLLが何であるかを知ることができますが、
読み込もうとしているDLLが既に読み込まれているかどうかは、知ることはでき
ないと思います。

[ ]