Как заставить работать COM объекты в потокеDelphi , Технологии , COM и DCOM
Автор: Vit Если вы используете многопоточное приложение то ActiveX(например ADO компоненты) даже созданные в отдельном потоке могут не хотеть работать корректно, из-за неправильной инициализации. Надо чуть-чуть видоизменить DPR файл - в uses добавить модуль ComObj, а самой первой строкой кода в проэкте должно идти: CoInitFlags := 0; Application.Initialize; Что означает инициализацию COM в каждом потоке Вечная проблема использования объектов COM в многопоточной приложении! Автор Вит прав, что даже создание объекта COM в отдельном потоке может не работать правильно из-за неправильной инициализации. Это потому, что объекты COM требуют специфической последовательности инициализации для функционирования корректно. Для решения этой проблемы рекомендуется добавить единицу
Давайте разберем, что эти строки делают:
Таким образом, вы обеспечиваете, что каждый поток имеет свой собственный экземпляр библиотеки COM и объекты правильно инициализируются перед использованием. Почему это необходимо? Ну, когда объект COM создается в отдельном потоке, он требует инициализации с собственным экземпляром библиотеки COM. Если несколько потоков делят один и тот же экземпляр библиотеки COM, то наступает хаос! Инициализируя каждый поток своей собственной библиотекой COM, вы обеспечиваете, что каждый поток имеет уникальную и правильно инициализированную среду COM. Альтернативные решения:
Однако использование простого решения, предложенного Витом, часто является наиболее прямым и эффективным подходом. В статье описывается, как заставить работать COM-объекты в многопоточном приложении, путем slight изменения DPR-файла и добавления модуля ComObj, а также инициализации Application.Initialize в каждом потоке. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: COM и DCOM ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |