Что выгружает модули при завершении программы vb6 - PullRequest
2 голосов
/ 22 февраля 2009

Правильный способ завершить программу vb6 - сделать что-то вроде этого:

Dim frm As Form
   For Each frm In Forms 
       Unload frm
   Next frm
   end

Что заботится о формах, что заботится о модулях в памяти?

Ответы [ 5 ]

4 голосов
/ 22 февраля 2009

Нет необходимости явно выгружать модули в VB6. Они выгружаются автоматически при выгрузке последней формы. Язык вообще не поддерживает ссылки на стандартные модули, только на (глобальные) функции и переменные, определенные в них. Поскольку вы не можете ссылаться на модуль, вы также не можете выгружать их.

3 голосов
/ 22 февраля 2009

Не используйте End, вам не нужно (никогда). Тогда вся память освобождается должным образом.

Даже при использовании End память должна освобождаться автоматически. Ходили слухи, что некоторые экземпляры классов забыты и не завершаются корректно, несмотря на подсчет ссылок. Таким образом, было установлено, что рекомендуется устанавливать явно все экземпляры объектов на Nothing (особенно, но не ограничиваясь экземплярами, размещенными в модулях). Я никогда не видел никаких подтверждений того, что это действительно так (хотя, возможно, все-таки это так!).

2 голосов
/ 24 февраля 2009

Если под «модулем» вы подразумеваете статические модули .BAS (все они модули: Forms, Classes, UserControls и т. Д.), Вам не нужно «выгружать» их, поскольку они static .

Большинство других типов модулей загружаются динамически. В случае форм обычно через предварительно объявленную глобальную ссылочную переменную с тем же именем и типом, что и у класса формы (да, форма является разновидностью класса).

1 голос
/ 22 февраля 2009

Обратите внимание, что если вы используете глобальные переменные, вам следует проверить, нужно ли очистить какую-либо из них. Если это так, у вас должен быть метод CleanUp вашего модуля и вызывать его во время события unload вашей основной формы. Другой гоча - это иногда ПОРЯДОК того, как вы разгружаете вещи. Делая явную очистку, вы можете контролировать это.

В VB6 вы должны редко использовать END. Если у вас есть циклические ссылки, программа останется процессом, поглощающим ресурсы, вызывающим различные странные ошибки при повторном запуске. С COM-объектами очень легко непреднамеренно настроить цепочку объектов, которые связаны по кругу.

Конец существует как удержание совместимости от предыдущей версии QuickBASIC и Visual BASIC. Это не начало вызывать серьезные проблемы, пока в VB 4.X не появилась возможность создавать классы. Это начало привлекать внимание в 5.X.

До этого один из единственных способов сделать это в VB 3.X состоит в том, чтобы две формы устанавливали ссылки друг на друга.

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

Метод выгрузки ВСЕХ МОДУЛЕЙ при выходе исправил забавную ошибку при получении кода выхода с помощью вызова API ExitProcess ()

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