setdetachfunc の挙動確認No.09031
天翔記.jp さん 16/08/26 17:29
 
8.6.6 β2に関して、
表題の報告となります。

一点確認となります。

■挙動テスト目的のため以下のような.macと.dllを作成しました。


setdetach.mac
----------------------------------
#_ = loaddll( hidemarudir + "\\Win32Project5.dll" );
setdlldetachfunc #_, "myexit";



test.cpp (Win32Project5.dll)
----------------------------------
#include <windows.h>
#include <string>

using namespace std;


extern "C" __declspec(dllexport) int myexit()  {
 int ret = MessageBoxA(NULL, "最初", "最初", MB_DEFBUTTON1);
 OutputDebugString((string("自動で消えたボックスの返値:") + to_string(ret) +
 "\n").data());
 // 秀丸ウィンドウが閉じるのとほぼ同時に、メッセージボックスも自動で閉じる

 for (int i = 0; i < 50; i++) {
  string num = to_string(i);
  OutputDebugString(string("キタキタ:" + num + "\n").data());
  if (i % 10 == 0) {
   OutputDebugString(string("メッセージ:" + num + "\n").data());

   // このメッセージボックスは実行はされているが、表示確認出来ない
   int ret = MessageBoxA(NULL, string("メッセージ:" + num + "\n").data(), st
ring("メッセージ:" + num + "\n").data(), MB_DEFBUTTON1);
   OutputDebugString((string("表示されないボックスの返値:") + to_string(ret)
 + "\n").data());
  }
  Sleep(300);
 }
 return 1;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

 if (fdwReason == DLL_PROCESS_DETACH) {
  OutputDebugString("デタッチ");
 }
 return  TRUE;
}


■実行した際の挙動
 適当なファイルに対して、setdetach.macを実行して、
 デバッグモニターを監視しつつ、「秀丸を閉じる」と、
 秀丸ウィンドウが消えた後も処理が継続し、
 最後に.dllがデタッチされるという動きとなります。

 これ自体は、それはそれで妥当性のあるモノ言えると思います。
 (途中で秀丸ウィンドウが消えるのか…?、とは思いましたが…)

 少なくとも、処理は最後まで実行されることは確認できました。


■質問です
 上記プログラムを走らせると、
 myexitの途中で、秀丸ウィンドウが消えるような感じですが、
 秀丸ウィンドウが消えると、MessageBoxAは、
 自動でIDOK押した相当になってる模様です。

 この挙動はOSではなく秀丸側がやってることですか?
 (秀丸プロセスから出たメッセージボックスに対して、どこからかひたすらWM_QUIT
でも打たれてるのか、と思ってしまって…)

[ ]
RE:09031 setdetachfunc の挙動確認No.09036
秀丸担当 さん 16/08/29 09:34
 

確かにそうなることが確認できました。
調べてみたところ、タブモードのときに枠のプロセスだけが何らかの理由で消滅
したときに、タブのプロセスの残骸が残らないようにチェックして自身で無理や
り終了する対策があり、それが働いてしまっていました。
正しく終了している場合は余計なチェックをしないように修正させていただきま
す。

[ ]
RE:09036 setdetachfunc の挙動確認No.09047
天翔記.jp さん 16/08/31 14:31
 
こちら、8.66 β3で同プログラムを実行すると、
・ダイアログが表示されるように修正されていることが確認出来ました。

[ ]