новый TXMLDocument в Borland C++ Builder

Могу ли я самостоятельно создать и уничтожить TXMLDocument в Borland C++ Builder? Я пытался, но borland продолжает говорить мне, что TXMLDocument является (и должен быть) управляемым компонентом IDE.

Кроме того, единственная причина, по которой я хочу это сделать, заключается в том, что TXMLDocument дает сбой: я получаю TXMLDocument и «получаю» книгу из него, устанавливаю некоторые свойства документа (xml позже сохраняется как файл Excel) и Я добавляю несколько стилей. Хорошо, затем я добавляю рабочий лист, а затем все нужные ячейки с правильным форматированием, а затем сохраняю его. На данный момент все в порядке.

Затем я хочу сохранить еще один Excel-файл. Поскольку среда IDE не позволяет мне удалять и воссоздавать TXMLDocument, я пытаюсь удалить только рабочий лист. Когда я пытаюсь это сделать (в режиме отладки), IDE переходит в пошаговый режим на вкладке ЦП (показывая какой-то ассемблер):

ntdll.DbgBreakPoint:
77A07DFE CC               int 3
77A07DFF C3               ret

person c0m4    schedule 08.12.2008    source источник


Ответы (2)


Вместо этого вам нужно сделать что-то вроде этого:

_di_IXMLDocument Doc = NewXMLDocument(); 

Я не могу вспомнить кровавых подробностей, почему, но это должно указать вам правильное направление.

Дополнительную информацию можно найти на веб-сайте Codegear здесь.

person Roddy    schedule 08.12.2008
comment
Оооо... Не совсем уверен, что мне делать с _di_IXMLDocument... Кажется, это совершенно другой тип объекта из TXMLDocument? - person c0m4; 08.12.2008
comment
Это тип интерфейса. И, как говорится в статье, класс ведет себя как интерфейс с подсчетом ссылок, когда вы указываете нулевого владельца для компонента TXMLDocument. - person Rob Kennedy; 08.12.2008

Попробуй это :

#include <oxmldom.hpp>
#include <XMLDoc.hpp>
#include <xmldom.hpp>
#include <XMLIntf.hpp>


  try
  {
   CoInitialize(0);
   _di_IXMLDocument xmlDoc;
    xmlDoc = LoadXMLData( s1 );
   s1 = xmlDoc->XML->Text;
   CoUninitialize();
   mylog( Fun + String::Format( "ANSW-MSG-XML %s ", ARRAYOFCONST(( s1 ))));
  }
  catch ( Exception & ex )
  {
   mylog( Fun + String::Format( "PARSEXML:ERRORE %s \nmsg:%s",
      ARRAYOFCONST(( ex.Message, cmdMsg ))));
  }
person enzo1959    schedule 15.09.2009