![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| SteelRat |
|
|||
|
Unregistered |
При соединении с серверов в методе OnExecute пытаюсь создать динамический объект типа TXMLDocument. При его создании вызывается exception с сообщением Microsoft MSXML is not installed, хотя тот же самый код при нажатии на какую-нибудь кнопку работает идеально. Может кто-то с этим сталкивался и сумеет мне помочь. Заранее благодарен.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
неплохо бы код показать ( оба варианта )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| SteelRat |
|
|||
|
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 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
зачем это в onExecute ? и вместо XMLDoc: IXMLDocument; может заюзать TXMLDocument ведь первый это только интерфейс, насколько я понимаю это только описание ф-ций , а к какому объекту обращатся он как бы не знает .... (в этой строке могу быть не прав) Это сообщение отредактировал(а) Romikgy - 15.9.2009, 09:43 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |