Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
14-1088126170
Ozone
2004-06-25 05:16
2004.07.11
Сетевой диск


1-1087995689
MetalFan
2004-06-23 17:01
2004.07.11
Хранение данных в EXE...


14-1087721381
Nic
2004-06-20 12:49
2004.07.11
Это интересно


1-1088358290
Dio
2004-06-27 21:44
2004.07.11
передача числовых значений из DLL


3-1087370937
Inkarik
2004-06-16 11:28
2004.07.11
Ошибка SQL Builder