Для инициализации приложения ObjectWindows требуется построить объект приложения и инициализировать приложение, каждый новый
экземпляр и основное окно.
Для запуска приложения объект TApplication вызывает свои
функции-элементы InitApplication, InitInstance и InitMainWindows.
Вы можете переопределить любые из этих функций и задать собственную инициализацию. Для получения полезного приложения можно также
переопределить InitMainWindow. Для переопределения функции TApplication нужно построить собственный производный от TApplication
класс.
Конструктор класса приложения должен вызывать конструктор
TApplication. Библиотека ObjectWindows обеспечивает собственные
средства для обработки ошибок и исключительных ситуаций (в функции WinMain). Любую инициализацию можно выполнять в функции OwlMain, которая вызывается заданной по умолчанию функцией WinMain.
Для построения объекта приложения создайте в функции OwlMain экземпляр класса приложения.
Хотя вы можете вызывать собственную функцию WinMain, поместив ее в исходный файл, делать этого не нужно. Все что требуется,
можно сделать в вызываемой ей функции OwlMain или в функциях-элементах инициализации TApplication.
Если вы решили создать свою собственную функцию WinMain,
TApplication поддерживает во втором своем конструкторе передачу
обычных параметров функции WinMain.
Пользователи одновременно могут выполнять несколько копий
приложения. С точки зрения 16-разрядных приложений инициализация
первого экземпляра выполняется только когда не работает вторая
копия приложения. Инициализация экземпляра происходит каждый раз,
когда пользователь запускает приложение. Если пользователь запускает и закрывает приложение, запускает его снова и т.д., то каждый экземпляр будет первым экземпляром, так как они работают не одновременно.
В случае 32-разрядных приложений каждое приложение работает
в своем собственном адресном пространстве без разделяемых данных,
поэтому каждый экземпляр выглядит как первый экземпляр. Таким образом, при инициализации 32-разрядного приложения оно выполняет и
инициализацию первого экземпляра, и инициализацию каждого экземпляра.
Если текущий экземпляр является первым экземпляром (на что
указывает hPrevInstance = 0), то вызывается InitApplication. В
производном классе приложения вы можете переопределить InitApplication (по умолчанию InitApplication не несет никакой функциональной нагрузки).
Пользователи могут одновременно выполнять несколько копий
(экземпляров) приложения. Для выполнения любой необходимой инициализации можно переопределить TApplication::InitInstance. InitInstance вызывает InitMainWindow, а затем создает и выводит на экран основное окно. Если вы переопределяете InitInstance, убедитесь, что новая функция InitInstance вызывает TAppliation::InitInstance.