如何解决在不弹出对话框的情况下终止基于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)终止父进程。 它将起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。