【发布时间】:2012-06-25 16:59:49
【问题描述】:
我想从注入另一个进程的 MFC dll 打开一个 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 modeless dialog close immediately 线程,但我的InitInstance() 已经从一开始就返回了true,所以这是一个不同的问题(我认为)
那么,我的问题是如何防止对话框被破坏?或者也许阻止线程退出?还是可以通过模态对话框实现?
【问题讨论】:
标签: c++ dll mfc dialog modeless