Здравствуйте все!
Народ, я не прошу, я умоляю о помощи, потому что мой запас знаний в этой области исчерпан. В общем ситуация такая:
Есть клиент и сервер построенные на Indy (8) компонентах TIdHTTPServer и TIdHTTP. В какой-то момент времени коиент шлет серверу запрос своим методом Get(). По этому запросу сервер должен загрузить в TXMLDocument какую-то файлу, каким-то образом ее обработать (это не важно) и вернуть клиенту какой-то результат.
Вот в чем проблема: Обработку поступающих от клиента сообщений я провожу в серверном событии OnGetCommand(...). ЕСЛИ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ЭТОГО СОБЫТИЯ ВЫЗВАТЬ
XML->LoadFromFile("D:\\1.xml");
То сервер вылетает с жуткой ошибкой:
---------------------------
Project Server.exe raised exception class EOleSysError with message 'CoInitialize has not been called'. Process stopped. Use Step or Run to continue.
---------------------------
Есди же это сделать не в обработке серверного события (в смысле не во время работы этого события), а в любое другое время, то все работает просто великолепно. Повторяю, ошибка вылетает именно на стадии загрузки XML. Я пробовал и run-time создание объекта TXMLDocument — бесполезно.
Очень прошу всех, подскажите кто что знает! Как с этим справится! ОЧЕНЬ НАДО! СРОЧНО!
P.S. Использование другой компоненты взамен TIdHTTP неприемлемо. Замена TXMLDocument на что-нибудь еще возможна
Всем заранее спасибо
Здравствуйте, _Student_, Вы писали:
_S_>УРА!!! Я сам нашел решение!
_S_>Ручной вызов CoInitialize(NULL); при входе в обработку события (он при этом новый поток создает).
_S_>При выходе можно CoUnitialize(); Но по-моему он и сам ее освободит.
Ага, освободит, но только после завершения основного процесса. Будет у тебя туча подразделений (Apartment)

Поосторожней с этим. Читай статью с этого сайта
Понимание подразделений COMАвтор(ы): Jeff Prosise
Дата: 22.02.2001
В этой статье подробно рассматриваются подразделения (apartments) в модели
COM. Автор описывает различные виды подразделений, показывает, каким образом
подразделения назначаются потокам и объектам, а также даёт ряд полезных
советов, которые позволят вам избежать ошибок при работе с подразделениями.