別のプロセスに挿入されたMFCdllからMFCモードレスダイアログを開きたいのですが、dllの仕事はwinsock send&recvをフックすることであり、ダイアログはdllと通信するためのインターフェイスになります。ダイアログの実行中にdllがフックを実行できる必要があります。
BOOL CDriverApp::InitInstance()
{
CWinApp::InitInstance();
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
AfxMessageBox("I'm In!");
DetourTransactionBegin();
DetourUpdateThread( GetCurrentThread() );
DetourAttach( &(PVOID &)RealSend, MySend );
DetourAttach( &(PVOID &)RealRecv, MyRecv );
if ((DetourTransactionCommit()) == NO_ERROR)
{
AfxMessageBox("Winsock hooked");
}
dlg = new ControlDlg();
m_pMainWnd = dlg;
if(dlg->Create(IDD_CONTROL_DLG))
{
dlg->ShowWindow(SW_SHOW);
}
//ExitThread(0);
return TRUE; <---
}
dlg
のメンバーであるダイアログですCDriverApp
私が観察したところによると、スレッドが終了し、ダイアログを保持しているメモリが削除されたため、ダイアログは破棄されます。
The thread '_DllMainCRTStartup' (0x418) has exited with code 1657602048 (0x62cd0000).
MFCモードレスダイアログをすぐに閉じるスレッドを読みましたが、最初からInitInstance()
すでに戻っtrue
ているので、別の問題です(私は思います)
だから、私の質問は、ダイアログが破壊されるのを防ぐ方法ですか?または、スレッドが終了しないようにしますか?または、モーダルダイアログで実行できますか?