SetMainWndTop と freedllNo.03113
ひろ さん 01/04/06 12:09
 
 秀まるおさん今日は、ひろです。
 ちょっと SetMainWndTop の仕様について伺いたい事があります。
 loaddll の仕様は、秀丸のヘルプで
> ロードされるのは現在の秀丸についてだけなので、nexthidemaru文等で他
> の秀丸に切り替わった場合は改めてloaddllしなおす必要があります。
とあります。それでは SetMainWndTop を使った場合は、loaddll し直す必
要はないのでしょうか? 今までマクロを組んだ限りでは、loaddll しなくて
も DLL 関数が使えるようですが、これは正しい使用法なのでしょうか?

 次に
> freedllしないままマクロを終了すると、ロードしたdllはそのままロード
> されたままになります。
とありますが、
#handle = hidemaruhandle(0);
#n = dllfunc("SetMainWndTop");
closehidemaru #handle;
とした場合や、マクロ内で閉じるのに限らず freedll せずに秀丸を終了さ
せると、呼び出された DLL は、メモリから解放されるのでしょうか? もし
解放されないのなら、
#handle = hidemaruhandle(0);
#main = dllfunc("MainWnd");
freedll;
setactivehidemaru #main;
closehidemaru #handle;
としなければならず、SetMainWndTop 関数はメモリの効率を考えると意味の
ない関数になってしまいます。

 この辺りの鶴亀に於ける DLL の呼び出し仕様を押して頂ければ幸いです。

[ ]
RE:03113 SetMainWndTop と freedllNo.03115
秀まるお さん 01/04/06 15:50
 
> 要はないのでしょうか? 今までマクロを組んだ限りでは、loaddll しなくて
> も DLL 関数が使えるようですが、これは正しい使用法なのでしょうか?

 鶴亀メールは1つのプロセス内で複数の秀丸をマルチスレッドで出しているだけな
ので、loaddllはどこかのエディタが1回だけすれば十分です。

 あと、tkinfo.dllをfreedllしても意味があるかどうかですが、結論を言うと意味
がありません。

 freedll関数はたしかにtkinfo.dllを解放します(FreeLibrary関数を呼び出しま
す)が、マクロとは別にテンプレートの処理のためにtkinfo.dllがロードされている
ので、結果としてtkinfo.dllは鶴亀メールが終了するまで解放されません。

 あと、tkinfo.dllのロードに失敗したかどうかも見なくていいです。tkinfo.dllが
ロードできないような状況ではテンプレートの処理に必ず失敗するはずなので、それ
で異常に気づくと思います。

 ついでに言うと、テンプレート側の処理ではtkinfo.dllのバージョンが鶴亀メール
と合っているかどうかもチェックしています。

----------
 という話は、言われてみればどこにも書いてないことなので、ヘルプに追加されて
いただきます。

[ ]
RE:03115 SetMainWndTop と freedllNo.03118
ひろ さん 01/04/06 17:37
 
 秀まるおさん今日は、ひろです。
>  鶴亀メールは1つのプロセス内で複数の秀丸をマルチスレッドで出しているだけな
> ので、loaddllはどこかのエディタが1回だけすれば十分です。
 詳細な説明有り難うございます。

>  という話は、言われてみればどこにも書いてないことなので、ヘルプに追加されて
 よろしくお願いします。

[ ]
RE:03115 SetMainWndTop と freedllNo.03119
ひろ さん 01/04/07 12:23
 
 秀まるおさん今日は、ひろです。
>  鶴亀メールは1つのプロセス内で複数の秀丸をマルチスレッドで出しているだけな
> ので、loaddllはどこかのエディタが1回だけすれば十分です。
 すいません。もう一つ疑問がでてきました。呼び出す DLL が tkinfo.dll
だけならこれで良いのですが、それ以外の DLL を読み込んだ場合はどうな
るのでしょうか?

[ ]
RE:03119 SetMainWndTop と freedllNo.03120
秀まるお さん 01/04/07 23:07
 
>  呼び出す DLL が tkinfo.dll
> だけならこれで良いのですが、それ以外の DLL を読み込んだ場合はどうな
> るのでしょうか?

 tkinfo.dll以外の場合でも、プロセスにつき1回という原則は同じでして、つまり、
エディタが切り替わってもloaddllしなおす必要はありません。

 もちろん、複数のDLLを使い分ける場合は、切り替えのたびにloaddllが必要ですけ
ど。

[ ]
RE:03120 SetMainWndTop と freedllNo.03121
ひろ さん 01/04/08 12:34
 
 秀まるおさん今日は、ひろです。
>  tkinfo.dll以外の場合でも、プロセスにつき1回という原則は同じでして、つま
>り、
> エディタが切り替わってもloaddllしなおす必要はありません。
 この辺りが秀丸と違うところですね。何度も質問に答えていただき、有り
難うございました。

[ ]