Re[2]: TIdHTTPServer и TXMLDocument
От: Danchik Украина  
Дата: 16.05.05 07:47
Оценка: 10 (1)
Здравствуйте, _Student_, Вы писали:

_S_>УРА!!! Я сам нашел решение!


_S_>Ручной вызов CoInitialize(NULL); при входе в обработку события (он при этом новый поток создает).


_S_>При выходе можно CoUnitialize(); Но по-моему он и сам ее освободит.


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

В этой статье подробно рассматриваются подразделения (apartments) в модели
COM. Автор описывает различные виды подразделений, показывает, каким образом
подразделения назначаются потокам и объектам, а также даёт ряд полезных
советов, которые позволят вам избежать ошибок при работе с подразделениями.
TIdHTTPServer и TXMLDocument
От: _Student_ Россия http://www.totalprogramming.narod.ru/
Дата: 16.05.05 04:43
Оценка:
Здравствуйте все!

Народ, я не прошу, я умоляю о помощи, потому что мой запас знаний в этой области исчерпан. В общем ситуация такая:

Есть клиент и сервер построенные на 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 на что-нибудь еще возможна

Всем заранее спасибо
Я не волшебник, я только учусь...
Re: TIdHTTPServer и TXMLDocument
От: _Student_ Россия http://www.totalprogramming.narod.ru/
Дата: 16.05.05 05:08
Оценка:
УРА!!! Я сам нашел решение!

Ручной вызов CoInitialize(NULL); при входе в обработку события (он при этом новый поток создает).

При выходе можно CoUnitialize(); Но по-моему он и сам ее освободит.
Я не волшебник, я только учусь...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.