|
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
でも打たれてるのか、と思ってしまって…)
|
|