|
試してみたところ、xpでは異常終了メッセージが出て、Win7ではイベントログだ
けに残って、Win8.1ではメッセージもイベントログも何も出ませんでした。
落ちている場所はWinMainの最後にやるOleUninitialize()の中のようです。
V8.64以前は、明示的にfreedllしない限り、FreeLibrary()はしないようになっ
ていました。
V8.64以前でも、freedllしていれば、同じように落ちるようです。
V8.66β1は、終了時でも正しく(?)、FreeLibrary()するようにしました。
以下のようなEXEのソースでも落ちるようです。
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) {
OleInitialize(0);
HMODULE hmod = LoadLibrary( TEXT("c:\\test\\dlltest.dll") );
int (_cdecl* HookWin32apiFuncs)();
*(FARPROC*)&HookWin32apiFuncs = GetProcAddress( hmod
, "HookWin32apiFuncs" );
HookWin32apiFuncs();
MessageBox(0,HookWin32apiFuncs?TEXT("1"):TEXT("0"),0,MB_TOPMOST);
FreeLibrary( hmod );
OleUninitialize();
return 0;
}
APIフックするというかなり特殊なDLLの内容のようなので、それに関することが
起因していると思います。
DllMainのDLL_PROCESS_DETACHでAPIフックを戻すとかすればいいのかはわかりま
せんが、いずれにしても秀丸エディタ側で対処できることではなさそうです。
他にもFreeLibrary()されたら困るケースがあるかもしれないので、秀丸エディ
タとしては、setdlldetachfunc文を呼ばない限りは、従来通りFreeLibrary()せ
ず放置したほうがよさそうです。
|
|