gpt4 book ai didi

c++ - 干净地关闭 ATL 应用程序

转载 作者:行者123 更新时间:2023-11-30 02:13:20 26 4
gpt4 key购买 nike

我开发了一个控制台 ATL 应用程序,想捕获关闭?、退出?、终止?事件,以便我可以关闭日志文件并在退出时执行常规清理。

我如何捕获因有人在任务管理器中结束 .exe 而导致的“终止”事件?

编辑:

这是一个控制台应用程序,我已经附加了主类。您能否指出我应该在哪里以及如何使用 SetConsoleCtrlHandler

// Override CAtlExeModuleT members
int WinMain(int nShowCmd) throw()
{
if (CAtlBaseModule::m_bInitFailed) //ctor failed somewhere
{
ATLASSERT(0);
return -1;
}

HRESULT hr = S_OK;

LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT

if( ParseCommandLine( lpCmdLine, &hr ) )
{
if( SUCCEEDED( RegisterClassObjects( CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE ) ) )
{
CComPtr<IRORCAdapterMain> pAdapter;

if( SUCCEEDED( pAdapter.CoCreateInstance( L"RORCAdapter.RORCAdapterMain" ) ) )
{
if( SUCCEEDED( pAdapter->StartAdapter() ) )
{
MSG msg;

while( GetMessage( &msg, 0, 0, 0 ) )
DispatchMessage( &msg );
}
}

RevokeClassObjects();
}
}

最佳答案

您无法从任务管理器的“进程”选项卡中捕获“结束进程”。如果一个程序可以捕获它,您将如何杀死它?

要响应任务管理器中“应用程序”选项卡上的“结束进程”,请处理主窗口中的 WM_CLOSE 消息。

这假定您的 ATL 应用程序是 Windows GUI 应用程序。如果是控制台应用程序,则需要查看 SetConsoleCtrlHandler。

关于c++ - 干净地关闭 ATL 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487340/

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