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