![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TXMLDocument в DLL?
Dysan © (2004-06-29 11:24:00)не подскажите почему в dll в процедуре
прописываю переменную типа TXMLDocument
var
N:IXMLNODE;
xml:TXMLDocument;
begin
xml:=TXMLDocument.Create(nil);
XML.LoadFromFile('c:\train.xml');
N:=xml.DocumentElement.ChildNodes[0];
end;
и при обращении N:=xml.DocumentElement.ChildNodes[0];
процедура вылетает! словно xml не создан! а в обычной программе все работает.
Тимохов (2004-06-29 13:17:00) [1]
> Dysan © (29.06.04 13:08) [14]
рад за вас, что вы нашли ответ.
блин, сам не догодался: действительно - здесь идет смешение работы с объектами и интерфейсами. Это обычно плохо заканчивается :((
Dysan (2004-06-29 13:08:00) [2]все оказалось очень просто
http://www.rxlib.ru/faqs/faqd_en/29241.html
надо было
писать не xml:TXMLDocument;
а xml:IXMLDocument;
Тимохов (2004-06-29 13:00:00) [3]
> Dysan © (29.06.04 12:56) [12]
да, в общем у меня тоже коряво работает.
Все - на этом мои знания в этой области кончились. Желаю успехов. :)))
Dysan (2004-06-29 12:56:00) [4]знать бы где еще почитать
Тимохов (2004-06-29 12:53:00) [5]ну успехов.
а вообще вы поосторожней с передачами параметров в/из dll.
почитайте сначала что-нить - там тонкостей много.
Dysan (2004-06-29 12:52:00) [6]раз заработало значит ошибка не в этой строке!
значит он что то не дообьявляет в этом обьекте ! :(
Dysan (2004-06-29 12:51:00) [7]сообщение об ошибки - говорит что нет доступа по такому то адресу.
а докопаться где же трабл не получаться потому что там одни интерфейсы :( и дебагом он выдает окно с ассемблером. :(
вобщем я нашел выход из положения
правда он не совсем правильный
я просто в процедуру передаю TXMLDocument обьект
созданный программой и вобщем все заработало.
Тимохов (2004-06-29 12:49:00) [8]автору.
Я не поленился, повторил вашу ситуацию.
CoInitialize не использовал.
В dll все прекрасно работает без последней строчки (n := ...).
У вас ошибка в ней, а не в xml. Он прекрасно открывается. С ним можно работать. Ошибка в строке
N:=xml.DocumentElement.ChildNodes[0];
Ищите.
Тимохов (2004-06-29 12:33:00) [9]
> процедура вылетает! словно xml не создан! а в обычной программе
> все работает.
почему словно? проверки сделайте и поймите почему конкретно вылетает, и сообщение об ошибке какое.
сами понимаете, инфа была бы полезна.
Dysan (2004-06-29 12:27:00) [10]CoInitialize(nil); не помог :(
о потоках, поток один.
Тимохов (2004-06-29 12:20:00) [11]1. ничего странного - классу tinifile не нужен com.
2. Вы не ответили на вопрос о потоках
3. Вы не попробовали то, что я вам посоветовал. В прошлый раз когда я советовал такое же - помогло.
Dysan (2004-06-29 12:18:00) [12]мда
вообще странно
вот например TrainIni:TIniFile;
TrainIni:=TIniFile.Create('c:\train.ini');
работал без всяких coinitialize
может быть в TXMLDocument надо еще что прописать?
Тимохов (2004-06-29 12:02:00) [13]Ну в обще в msdn написано про coinitialize, что его нужно вызывать для каждого потока. Вроде про dll ничего не сказано.
У вас один главный поток или есть еще потоки?
Тимохов (2004-06-29 11:57:00) [14]сильно не уверен, но вроде бы надо вызвать coinitialize для работы с com. В главном потоке за вас это уже дельфи сделала.
Попробуйте, может поможет.
"Попытка не пытка, правда тов. Берия" (с) народ.
Dysan (2004-06-29 11:53:00) [15]так может кто подкажет?