Вызывает ли API вызов ExitProcess () нормально в VB6, если вы следуете инструкциям MS? - PullRequest
3 голосов
/ 17 июня 2010

Microsoft указывает, что VB6 не поддерживает ExitProcess (для выхода и возврата значения).

Однако это указывает на то, что этот вызов может завершиться ошибкой при определенных обстоятельствах (если поток не был завершен и т. Д.)

поэтому мне интересно, будет ли этот вызов работать нормально (последовательно :-), если вы будете соблюдать предостережения в статье.

Я мог бы пойти дальше и вызвать ExitProcess () из Sub Main или Form, которые смотрели приложение.

Обновление : после некоторого прочтения (я действительно немного изучил этот вопрос, прежде чем спрашивать), я нашел предложение использовать вместо TerminateProcess API . Я изучаю этот вариант.

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

Вы могли бы использовать метод Карла Петерсона для создания консольного приложения из VB6?Затем используйте Con.ExitCode = 1 (как показано во втором примере).

Он распространяет бесплатную надстройку vbAdvance , которая помогает создавать консольные приложения.

1 голос
/ 23 июля 2010

Лучшим вариантом, вероятно, является создание точки входа Sub Main и вызов ExitProcess оттуда, а не из класса или формы.Или (что я и делаю) вызовите ExitProcess из события Form Unload и получите основную точку входа, такую ​​как:

Sub Main code Launch Form Exit Main

Затем: Form_Unload code ExitProcess Endsub 'Form_Unload

Таким образом, ExitProcess будет последним битом кода, который вы выполняете.Это не будет красиво, и вы, вероятно, потеряете некоторые дескрипторы и еще много чего, но NT4 и выше довольно хорошо справляются с этим.Другими словами, выньте свое приложение из Sub Main и вызовите API, прежде чем выйти из него.

Примечание: это было опубликовано Kprobst, но в конце сообщения был неправильный ответ,Так что я публикую это здесь для ясности.

0 голосов
/ 16 апреля 2013

Взгляните на это: Что выгружает модули при завершении программы vb6

Создать глобальную переменную

Public ErrorLevel As Long

Создайте подобную подпрограмму:

Public Sub UnloadAll ()

Dim f As Integer

f = Forms.Count

Делай пока f> 0

  Unload Forms(f - 1)

  If f = Forms.Count Then Exit Do

  f = f - 1

Loop

ExitProcess ErrorLevel

End Sub

В конце «main» или в коде выгрузки основной формы укажите:

UnloadAll

Хорошо работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...