Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

так может кто подкажет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо