| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Вопрос по TXMLDocument |
| Автор: korotkov 5.11.2006, 23:27 | ||
| Вопрос по TXMLDocument Использую Borland C++Builer 6.0 + VirtualTreeView ... Перевожу пример из http://quadr0.pochta.ru/VirtualTreeview/virtualtreeview_pdf.zip ( http://forum.vingrad.ru/topic-97620/unread-1/hl/virtualtreeview/index.html ) сохранения дерева VirtuaTreeView в XML файл.
Компилится, но программа вылетает по EAccessViolation при попытке получения XMLDocument->DocumentElement В design режиме, если положить компонент на форму TXMLDocument, то все Ок, а в runtime беда Что я делаю не так? |
| Автор: _hunter 6.11.2006, 12:30 | ||
| в конструктор строку передавать нельзя (не тот конструктор вызовется) и DOMVendor установить не помешалобы:
так же неплохо бы проверить когда AV кидается (при вызове "XMLDocument->DocumentElement" или при работе SaveXML()) |
| Автор: korotkov 6.11.2006, 16:47 | ||||
| еслиб все так было просто ;) В примере на Delphi конструктор действительно вызывается с параметром self, а далее удаляется ... На C++Buildere 6 конструктор объявлен как TXMLDocument(const DOMString AFileName); и на TXMLDocument* xmlDocument = new TXMLDocument(Application); соответственно ругается > xmlDocument->DOMVendor = GetDOMVendor("MSXML"); наверное это установлено поумолчанию в конструкторе!? но добавил ... теперь и на ней вылетает!!! >так же неплохо бы проверить когда AV кидается (при вызове "XMLDocument->DocumentElement" или при работе SaveXML()) вылетает именно на DocumentElement, проверил, точнее даже на ...
в модуле systobj.h Все это незаладилось с перевода куска кода не Delphi, там конструктор TXMLDocument вызывается с параметром self, а в Builder конструктор просит строку имя!!!
Вот такие пироги! Повторюсь, это все не работает если создавать как написано выше в runtime, а если кинуть на форму XMLDocument, то все Ок! |
| Автор: korotkov 6.11.2006, 18:35 |
| >их там два... а подробнее можно ... компилятор ругается если я в качестве параметра ставлю this или Application, говорит нет такого: Could not find a match for TXMLDocument::TXMLDocument(...) я так понимаю отсюда и ноги растут!;) >почитай... Разве что это: >XmlDoc=new TXMLDocument(TName); Do not do that. TXMLDocument does not work properly when instantiated dynamically. Use the IXMLDocument interface directly, ie: _di_IXMLDocument XmlDoc; но на чем это утверждение основывается, проверю ... Вопрос свелся к ... : как в runtime создать XML документ и сохранить его на диск, с применением TXMLDocument |
| Автор: Vyacheslav 7.11.2006, 17:11 |
| Ну так есть такая проблем с TXMLDocument. А кто мешает использовать _di_IXMLDocument? |
| Автор: korotkov 9.11.2006, 00:00 |
| >Ну так есть такая проблем с TXMLDocument. так в чем проблема заключается, где об этом ... >А кто мешает использовать _di_IXMLDocument? да, вместо: TXMLDocument *XMLDocument = new TXMLDocument(""); пишу: _di_IXMLDocument XMLDocument = NewXMLDocument(); работает! Но я уже бросил компоненту на форму и ... ;) Так в чем суть разница, накручено как-то с этим вопросом! На каком варианте остановиться? |
| Автор: Vyacheslav 9.11.2006, 10:45 |
| Если есть возможнность добавить компонент в дизайне, то используй TXMLDocument, если - нет, то di_IXMLDocument. Во всяком случае я другого решения в свое время не смог найти |
| Автор: korotkov 9.11.2006, 15:37 |
| >Если есть возможнность добавить ... а более глубоко не копал? Исходники и прочее ... в чем суть разница?! |