如果遵循MS警告,API调用ExitProcess()在VB6中是否正常工作?

如果遵循MS警告,API调用ExitProcess()在VB6中是否正常工作?,vb6,Vb6,Microsoft指出(退出并返回一个值) 但是,它表示在某些情况下(如果线程尚未完成等),此调用可能会失败 因此,我想知道,只要您遵守本文中的警告,这个调用是否可以正常工作(始终:-) 我可以更进一步,从启动应用程序的Sub-Main或表单调用ExitProcess() 更新:在读了一些书之后(我在询问之前确实做了一些研究),我发现了一个新的问题。我正在调查这个选择 有什么想法吗?您可以使用VB6中的卡尔·彼得森?然后使用Con.ExitCode=1(如第二个示例所示) 他正在分发一个免费插件

Microsoft指出(退出并返回一个值)

但是,它表示在某些情况下(如果线程尚未完成等),此调用可能会失败

因此,我想知道,只要您遵守本文中的警告,这个调用是否可以正常工作(始终:-)

我可以更进一步,从启动应用程序的Sub-Main或表单调用ExitProcess()

更新:在读了一些书之后(我在询问之前确实做了一些研究),我发现了一个新的问题。我正在调查这个选择


有什么想法吗?

您可以使用VB6中的卡尔·彼得森?然后使用
Con.ExitCode=1
(如第二个示例所示)


他正在分发一个免费插件,帮助您构建控制台应用程序。

最好的选择可能是创建一个Sub-Main入口点,然后从那里而不是从类或表单调用
ExitProcess
。或者(这就是我正在做的)从表单卸载事件调用
ExitProcess
,并具有如下主入口点:

Sub Main
'code
Launch Form
Exit Main
然后:

因此,
ExitProcess
将是您执行的最后一位代码。 它不会很漂亮,你可能会泄漏一些手柄之类的东西,但NT4和更高版本在处理这方面还是相当不错的。换句话说,从Sub-Main驱动应用程序并在退出之前调用API

注意:这是Kprobst发布的,但它是在一篇文章的末尾,有一个错误的答案。因此,为了清晰起见,我将其重新发布在这里。

看看这个:

创建全局变量:

Public ErrorLevel As Long
创建一个子系统,如下所示:

Public Sub UnloadAll()
   Dim f As Integer
   f = Forms.Count
   Do While f > 0
       Unload Forms(f - 1)
       If f = Forms.Count Then Exit Do
       f = f - 1
   Loop
   ExitProcess ErrorLevel
 End Sub
在“main”的末尾或主窗体的卸载代码中,输入以下内容:

UnloadAll
很好用

UnloadAll