在不弹出对话框的情况下终止基于MFC的C ++

问题描述

我们有一个旧的基于MFC的C ++ gui应用程序(Visual Studio 6.0),该应用程序通常无法正确终止。因此,我希望能够使用“ abort();”之类的指令。立即结束。

但是,abort()指令会导致一个对话框弹出,而不是立即结束。使用“ exit(int)”无效。

是否有消除中止对话框的方法,还是有更好的终止方法?

解决方法

如果它是基于对话框的应用程序,则可以使用EndDialog(IDOK)方法。

,

一种明显的中止方式,无需任何其他任何提前操作即可调用Windows ExitProcess函数:

/usr/local/share/dotnet/sdk/3.1.403/Sdks/Microsoft.NET.Sdk.Publish/targets/PublishTargets/Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): error : Web deployment task failed. (Connected to the remote computer using the Web Management Service,but could not authorize. Make sure that you are using the correct user name and password,that the site you are connecting to exists,and that the credentials represent a user who has permissions to access the site.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.)
    /usr/local/share/dotnet/sdk/3.1.403/Sdks/Microsoft.NET.Sdk.Publish/targets/PublishTargets/Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): error : Make sure the site name,user name,and password are correct. If the issue is not resolved,please contact your local or server administrator.
    /usr/local/share/dotnet/sdk/3.1.403/Sdks/Microsoft.NET.Sdk.Publish/targets/PublishTargets/Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): error : Error details:
    /usr/local/share/dotnet/sdk/3.1.403/Sdks/Microsoft.NET.Sdk.Publish/targets/PublishTargets/Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): error : Connected to the remote computer ("ec2-3-92-105-216.compute-1.amazonaws.com") using the Web Management Service,and that the credentials represent a user who has permissions to access the site.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.
    /usr/local/share/dotnet/sdk/3.1.403/Sdks/Microsoft.NET.Sdk.Publish/targets/PublishTargets/Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): error : The remote server returned an error: (401) Unauthorized.
    Publish failed to deploy.

如果要从某个外部程序中将其杀死,则可以使用ExitProcess(exitCode); 来执行。为此,您需要一个流程句柄,这通常意味着获取其流程ID。如果您是通过生成了要杀死的程序的程序来执行此操作的,则在创建该程序时可能会得到该程序的句柄。否则,您可能需要使用类似TerminateProcess的东西来找到其窗口,然后使用FindWindow来寻找该窗口的进程的ID。有了它,您就可以呼叫GetWindowThreadProcessId来获得句柄,最后呼叫OpenProcess来杀死它。

,

打开对话框时,另一个线程是从其父进程创建的,而exit(0)函数仅杀死父进程,而不杀死对话框线程。因此,您应该首先使用EndDialog()函数,然后调用exit(0)终止父进程。 它将起作用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...