Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.041 c
14-1087841894
able
2004-06-21 22:18
2004.07.11
ПРоблемы с форумом


3-1087042017
Anna
2004-06-12 16:06
2004.07.11
Хранимые процедуры


14-1087584156
Yegorchic
2004-06-18 22:42
2004.07.11
HTML. Меню...


3-1086973523
Vetek
2004-06-11 21:05
2004.07.11
SQL-запрос - выборка популярных значений


14-1088082581
RealRascal
2004-06-24 17:09
2004.07.11
Fuzz





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский