gpt4 book ai didi

c++ - 线程退出时,dll 中的 mfc 无模式对话框被破坏

转载 作者:行者123 更新时间:2023-11-28 08:02:01 25 4
gpt4 key购买 nike

我想从注入(inject)另一个进程的MFC dll打开一个MFC无模式对话框,dll的工作是 Hook winsock发送和接收,对话框将是与dll通信的接口(interface)。 dll 应该能够在对话框运行时运行 Hook 。

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,所以这是一个不同的问题(我认为)

那么,我的问题是如何防止对话框被破坏?或者阻止线程退出?还是可以通过模态对话框实现?

最佳答案

这可能是你的问题:

Regular DLLs must have a CWinApp-derived class and a single object of that application class, as does an MFC application. However, the CWinApp object of the DLL does not have a main message pump, as does the CWinApp object of an application.

Note that the CWinApp::Run mechanism does not apply to a DLL, because the application owns the main message pump. If the DLL opens modeless dialogs or has a main frame window of its own, the application's main message pump must call a routine exported by the DLL that in turn calls the CWinApp::PreTranslateMessage member function of the DLL's application object.

http://msdn.microsoft.com/en-US/library/f22wcbea(v=vs.80 )

编辑:

这显示了如何使用 cWnd 而不是 CDialog 来完成您正在做的事情。我个人认为这是更好的方法。

http://codinganswer.com/c/cwnd-in-a-new-thread-in-a-dll.html

这是一个将消息 Hook 附加到无模式的示例。

http://support.microsoft.com/kb/q187988/

关于c++ - 线程退出时,dll 中的 mfc 无模式对话框被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11193794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com