Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Вниз

XML   Найти похожие ветки 

 
Андре_   (2002-04-01 09:44) [0]

Подскажите пожалуйста.

Есть следующий код:

......

type TODBCConfigReader = class(TObject)
XML: TXMLDocument;
private
Provider : string;
PSI : string;
UserID : string;
DS : string;
IC : string;
ConnStr : string;
public
FileName : string;
procedure GetInfo;
end;

......

procedure TODBCConfigReader.GetInfo;
begin
XML:=TXMLDocument.Create(nil);
XML.LoadFromFile("c:\dta.xml");
Provider:=XML.DocumentElement.ChildNodes["Provider"].Text; (!!)
PSI:=XML.DocumentElement.ChildNodes["PersistSecurityInfo"].Text; (!!)
UserID:=XML.DocumentElement.ChildNodes["UserID"].Text; (!!)
DS:=XML.DocumentElement.ChildNodes["DataSource"].Text; (!!)
IC:=XML.DocumentElement.ChildNodes["InitialCatalog"].Text; (!!)

ConnStr:="Provider="+Provider+";"+
"Persist Security Info"+PSI+";"+
"User ID="+UserID+";"+
"Data Source="+DS+";"+
"Initial Catalog="+IC;
end;

......

В строках помеченных (!!) во время выполнения программы возникает ошибка. Хотя документ загружается корректно. Смотрел свойство XML.xml - все в порядке.
Если расположить TXMLDocument на форме, а не создавать динамически, то этот код работает корректно.

В чем может быть дело ?


 
Дмитрий   (2002-04-01 10:25) [1]

CoInitialize(0) пробовал?


 
Adoon   (2002-04-01 11:28) [2]

Может Active надо установить?


 
Олег Лаукарт   (2002-04-09 12:24) [3]

Какой модуль надо включать в проект для CoInitialize? Ole2, OleAuto...?
У меня подобная проблема: если создаю TXMLDocument в отдельном TDataModule, то все нормально, в если создаю его налету, то Active установить в true можно, но не больше.
1. Что надо включать, чтобы инициализация OLE проходила автоматически?
2. Есть ли ньансы при создании на лету и с дальнейшей работой с TXMLDocument в многопотоковом приложении?
Спасибо.


 
Sergey U.   (2002-04-09 13:17) [4]

На эту тему есть интересная статья:
http://delphi.diagnostic.ru:8101/cgi-bin/opendoc?22


 
Олег Лаукарт   (2002-04-10 11:21) [5]

полезная статья, спасибо, но там нет ответа на вопрос: почему TXMLDocument не работает если мы его создаем в не основном потоке - EOLEException:"CoInitialize has not been called", тогда как в основном потоке все работает нормально.


 
Олег Лаукарт   (2002-04-10 11:53) [6]

Сделал пример: в потоке (TThread) в Execute создаю TXMLDocument, работаю с ним и делаю Terminate - валится указанное исключение. Оформляю все в
procedure TMyThread.Execute;
begin
OleInitialize(nil);
..
OleUninitialize;
Terminate;
end;

после этого все работает.
Вопрос
1. есть ли альтернатива решению описанной проблемы?
2. что происходит с ресурсами системы. что будет если одновременно запущенно много потоков или что будет после 100 тысяч последовательных запусков потоков?


 
Anatoly Podgoretsky   (2002-04-10 12:59) [7]

1. "CoInitialize has not been called", не был сделан вызов CoInitialize, вот поэтому
2. проверить натурными испытаниями



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-69838
DeMoN-777
2002-04-11 04:14
2002.04.22
ListBox


3-69723
Hermit
2002-04-01 12:18
2002.04.22
DBGrid и режим редактирования


14-69984
Кулюкин Олег
2002-03-12 08:57
2002.04.22
DBAware компоненты - за и против


3-69704
sir_musatov
2002-03-22 11:14
2002.04.22
индексация Баз Данных


14-70007
lipskiy
2002-03-16 17:07
2002.04.22
Как это правильно перевисти и что это значит?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский