Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 проблемы с TXMLDocument  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 756
Простейший тестовый XML
<test>
    <node1 attr="str">TestNode</node1>
    <node2>1234567890</node2>
    <array>
        <item>TestItem1</item>
        <item>TestItem2</item>
        <item>TestItem3</item>
    </array>
</test>



форма, одна кнопка.

uses Xml.XMLDoc,Xml.XMLIntf, Xml.Xmldom
...

procedure TForm1.SpeedButton1Click(Sender: TObject);
var Dll_FormConfig, TabNode : IXMLNode;
    XMLDoc : TXMLDocument;
    s : String;
begin
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.LoadFromFile('DllConfig.xml');
  Dll_FormConfig := XMLDoc.DocumentElement;
  TabNode := Dll_FormConfig.ChildNodes['node1'];
  s := TabNode.Text;
  s := TabNode.Attributes['attr'];
end;

Delphi Rio 10.3.

В отдельном приложении в виде как_бы_рабочей демки - все нормально.
А вот если включить EurekaLog - моментально вылетает DeadObjectVirtualMethodCall. В реальном многопоточном приложении 3 раза из 4 вылетает PointerError.

Копнул внутрь - в процессе обращения к XMLDoc.DocumentElement вызывается TXMLNode.GetChildNodes, после которого дважды освобождается интерфейс, один из которых приводит к TXMLDocument.Destroy;

Естественно, что после этого обращения к пропам освобожденного объекта работает только если никто другой туда ничего не успеет записать.

Гугл гуглил, везде примитивные демки типа моей, мол смотрите как все просто.

Пробовал в Vendor ставить OXML вместо стандартного MSXML, все так же (что логично).

Я чего-то не понимаю, или это отличный баг TXMLDocument ?

Сообщение было отредактировано: 19 май 20, 09:54
19 май 20, 09:54    [22135530]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с TXMLDocument  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1701
var XMLDoc : IXMLDocument;
19 май 20, 10:24    [22135558]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с TXMLDocument  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 756
спасибо.

а в
http://docwiki.embarcadero.com/CodeExamples/Rio/en/TXMLDocumentDOMVendor_(Delphi) используют TXMLDocument.

Ладно, неважно. Работает и работает.
19 май 20, 10:55    [22135580]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с TXMLDocument  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11776
Vizit0r
Ладно, неважно.
Важно. Вы смешиваете работу с объектными указателями
Vizit0r
XMLDoc : TXMLDocument;
и интерфейсными
Vizit0r
Dll_FormConfig, TabNode : IXMLNode
Так, без специальных танцев, в виде ручного вызова _AddRef, _Release, работать не будет никогда
19 май 20, 11:57    [22135644]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с TXMLDocument  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1119
Vizit0r

...
Копнул внутрь - в процессе обращения к XMLDoc.DocumentElement вызывается TXMLNode.GetChildNodes, после которого дважды освобождается интерфейс, один из которых приводит к TXMLDocument.Destroy;

Естественно, что после этого обращения к пропам освобожденного объекта работает только если никто другой туда ничего не успеет записать.

...

Я чего-то не понимаю, или это отличный баг TXMLDocument ?


http://docwiki.embarcadero.com/Libraries/Rio/en/Xml.XMLDoc.TXMLDocument
автор
When TXMLDocument is created without an Owner, it behaves like an interfaced object. That is, when all references to its interface are released, the TXMLDocument instance is automatically freed. When TXMLDocument is created with an Owner, however, it behaves like any other component, and is freed by its Owner. When you add a TXMLDocument component from the component palette to a form or data module, it is automatically created with an Owner. When the TXMLDocument component is created using the global LoadXMLDocument function (or by a function that the XML Data Binding wizard generates to return the root node of the document), the function creates a TXMLDocument instance without an Owner.
19 май 20, 12:10    [22135656]     Ответить | Цитировать Сообщить модератору
 Re: проблемы с TXMLDocument  [new]
Vizit0r
Member

Откуда: Одесса
Сообщений: 756
ага, я уже в исходниках копнул.
19 май 20, 14:42    [22135824]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить