Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TIdTCPServer и TXMLDocument 
:(
    Опции темы
SteelRat
Дата 22.10.2004, 10:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











При соединении с серверов в методе OnExecute пытаюсь создать динамический объект типа TXMLDocument. При его создании вызывается exception с сообщением Microsoft MSXML is not installed, хотя тот же самый код при нажатии на какую-нибудь кнопку работает идеально. Может кто-то с этим сталкивался и сумеет мне помочь. Заранее благодарен.
  Вверх
_hunter
Дата 22.10.2004, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



неплохо бы код показать ( оба варианта )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
SteelRat
Дата 24.10.2004, 21:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1-й вариант:
Кидаю на форму компонент TXMLDocument и в методе OnExecute компонента TIdTCPServer пытаюсь загрузить XML файл:
XMLDoc.LoadFromFile("c:\File.xml");
2-й вариант:
В методе OnExecute компоненты TIdTCPServer пишу слудующее
var
XMLDoc: IXMLDocument;
begin
inherited;
XMLDoc := NewXMLDocument;
XMLDoc.LoadFromFile('c:\File.xml');
....
end;



  Вверх
pethead
Дата 15.9.2009, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



я так понял что MSXML в потоке не умеет работать, а метод OnExecute вызывается в потоке порожденным компонентом.

вот и объяснение.

> The problem I get is I cannot activate teh XML Component, I get
> an error stating that the COInitialize has not been called.

The error is self-explanatory.  You have not called CoInitialize/Ex() yet
before trying to instantiate the parser.  The parser you are using is
internally trying to use an ActiveX object (if you are using TXMLDocument,
then on Windows machines it uses MSXML by default, which is ActiveX-based).
Any thread that wants to use an ActiveX object must call CoInitialize/Ex()
first.  TIdTCPServer is a multi-threaded component.

> Research show I need to pu in the Coinitilize statement in the code
> but i have no idea where nor how to.

You can call it in the server's OnConnect event, and then call
CoUninitialize() in the OnDisconnect event.

A better way to do it would be to derive a new class from TIdThreadWithTask
and override its BeforeExecute() and AfterExecute() to make the calls
instead.  Then assign one of the TIdSchedulerOfThread descendants (such as
TIdSchedulerOfThreadDefault) to the server's Scheduler property, and assign
your custom class type to the scheduler's ThreadClass property. 

я заменил TXMLDocument на 
 SimpleXML - Библиотека для синтаксического разбора текстов XML
     и преобразования в иерархию XML-объектов.
     И наоборот: можно сформировать иерархию XML-объектов, и
     уже из нее получить текст XML.
     Достойная замена для MSXML. При использовании Ansi-строк
     работает быстрее и кушает меньше памяти.




Это сообщение отредактировал(а) pethead - 15.9.2009, 07:47
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 15.9.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



Цитата(SteelRat @  24.10.2004,  20:47 Найти цитируемый пост)
inherited;

зачем это в onExecute ?
и вместо 
XMLDoc: IXMLDocument;
может заюзать TXMLDocument 
ведь первый это только интерфейс,
насколько я понимаю это только описание ф-ций ,  а к какому объекту обращатся он как бы не знает .... (в этой строке могу быть не прав)

Это сообщение отредактировал(а) Romikgy - 15.9.2009, 09:43


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.