Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по TXMLDocument, сохранения дерева VirtuaTreeView в XML 
V
    Опции темы
korotkov
Дата 5.11.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Вопрос по TXMLDocument

Использую Borland C++Builer 6.0 + VirtualTreeView ...
Перевожу пример из http://quadr0.pochta.ru/VirtualTreeview/vi...reeview_pdf.zip
( http://forum.vingrad.ru/topic-97620/unread...view/index.html )
сохранения дерева VirtuaTreeView в XML файл.

Код

  TXMLDocument *XMLDocument;

  XMLDocument = new TXMLDocument("");

  try{
    XMLDocument->Active = True;
    XMLDocument->Encoding = "UTF-16";
    XMLDocument->AddChild("VirtualTreeView");
    XMLDocument->Options = XMLDocument->Options << doNodeAutoIndent;

    SaveXML(VST->RootNode, XMLDocument->DocumentElement);

    XMLDocument->SaveToFile("vt.xml");
  }
  __finally{
    //FreeAndNil(XMLDocument);
    delete XMLDocument;
  }


Компилится, но программа вылетает по EAccessViolation при попытке получения XMLDocument->DocumentElement

В design режиме, если положить компонент на форму TXMLDocument, то все Ок, а в runtime беда smile

Что я делаю не так?

PM MAIL WWW ICQ   Вверх
_hunter
Дата 6.11.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



в конструктор строку передавать нельзя (не тот конструктор вызовется)
и DOMVendor установить не помешалобы:
Код

    TXMLDocument* xmlDocument = new TXMLDocument(Application);
      xmlDocument->DOMVendor = GetDOMVendor("MSXML"); 
      xmlDocument->Active = true;

так же неплохо бы проверить когда AV кидается (при вызове "XMLDocument->DocumentElement" или при работе SaveXML())


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
korotkov
Дата 6.11.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



еслиб все так было просто ;)

В примере на Delphi конструктор действительно вызывается с параметром self, а далее удаляется ...

На C++Buildere 6 конструктор объявлен как TXMLDocument(const DOMString AFileName);

и на TXMLDocument* xmlDocument = new TXMLDocument(Application); соответственно ругается smile

> xmlDocument->DOMVendor = GetDOMVendor("MSXML");
наверное это установлено поумолчанию в конструкторе!?
но добавил ... теперь и на ней вылетает!!!

>так же неплохо бы проверить когда AV кидается (при вызове "XMLDocument->DocumentElement" или при работе SaveXML())
вылетает именно на DocumentElement, проверил, точнее даже на ...

Код

__fastcall DelphiInterface<T>() : info(0)
{}


в модуле systobj.h

Все это незаладилось с перевода куска кода не Delphi, там конструктор TXMLDocument вызывается с параметром self, а в Builder конструктор просит строку имя!!!

Код

  XMLDocument := TXMLDocument.Create(Self);
  try
    with XMLDocument do
    begin
      Active := True;
      Encoding := 'UTF-16';
      AddChild('VirtualTreeview');
      Options := Options + [doNodeAutoIndent];
    end;
    SaveXML(VT.RootNode, XMLDocument.DocumentElement);
    XMLDocument.SaveToFile('vt.xml');
  finally
    FreeAndNil(XMLDocument);
  end;


Вот такие пироги!

Повторюсь, это все не работает если создавать как написано выше в runtime, а если кинуть на форму XMLDocument, то все Ок!
PM MAIL WWW ICQ   Вверх
_hunter
Дата 6.11.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(korotkov @  6.11.2006,  16:47 Найти цитируемый пост)
На C++Buildere 6 конструктор объявлен как TXMLDocument(const DOMString AFileName);

их там два...

еще тут:
http://groups.google.com/group/borland.pub...c60bdd5a7fae56/
почитай...



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
korotkov
Дата 6.11.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



>их там два...
а подробнее можно ...

компилятор ругается если я в качестве параметра ставлю 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


Это сообщение отредактировал(а) korotkov - 6.11.2006, 18:39
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 7.11.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Ну так есть такая проблем с TXMLDocument.
А кто мешает использовать   _di_IXMLDocument?


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
korotkov
Дата 9.11.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



>Ну так есть такая проблем с TXMLDocument.
так в чем проблема заключается, где об этом ...

>А кто мешает использовать   _di_IXMLDocument?
да, вместо:  
TXMLDocument *XMLDocument = new TXMLDocument("");
пишу:
_di_IXMLDocument XMLDocument = NewXMLDocument();
работает!

Но я уже бросил компоненту на форму и ... ;)

Так в чем суть разница, накручено как-то с этим вопросом!  smile  

На каком варианте остановиться?

PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 9.11.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Если есть возможнность добавить компонент в дизайне, то используй TXMLDocument, если - нет, то di_IXMLDocument. 
Во всяком случае я другого решения в свое время не смог найти


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
korotkov
Дата 9.11.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



>Если есть возможнность добавить ...
а более глубоко не копал? Исходники и прочее ... в чем суть разница?!

 smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.