Bonjour,

Dans le besoin d'un traitement multithread utilisant XML, je ne peux pas utiliser le composant TXMLDocument en glissant seulement de la palette Internet ce composant; je dois avoir un TXMLDocument pour chaque thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TMyThread::Treatment()
{
TXMLDocument* pXmlDoc = new TXMLDocument("");
pXmlDoc->DOMVendor = GetDOMVendor("MSXML");
pXmlDoc->Active = true;
AnsiString str = "<MainForm><Height>480</Height><!--Salut--><Width>696</Width><Top>107</Top><Left>233</Left><Panel1><Caption>Panel1</Caption><Color>clBtnFace</Color><Boolean>0</Boolean><Strings>Rijaniaina</Strings></Panel1></MainForm>";
pXmlDoc->LoadFromXML(str);
_di_IXMLNodeList xmlRootNode = pXmlDoc->DocumentElement->ChildNodes;//surely MainForm
MainForm->Height =  StrToInt(xmlRootNode->Nodes[WideString("Height")]->Text);
MainForm->Width = StrToInt(xmlRootNode->Nodes[WideString("Width")]->Text);
MainForm->Top =  StrToInt(xmlRootNode->Nodes[WideString("Top")]->Text);
MainForm->Left = StrToInt(xmlRootNode->Nodes[WideString("Left")]->Text);
_di_IXMLNodeList xmlPanelNode = xmlRootNode->Nodes[WideString("Panel1")]->ChildNodes;
Panel1->Caption = xmlPanelNode->Nodes[WideString("Caption")]->Text;
Panel1->Color = StringToColor(xmlPanelNode->Nodes[WideString("Color")]->Text);
CheckBox1->Checked = StrToBool(xmlPanelNode->Nodes[WideString("Boolean")]->Text);
Memo1->Lines->CommaText = xmlPanelNode->Nodes[WideString("Strings")]->Text;
}
J'ai une exception de violation d'accès à l'adresse 0x00000000 à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
_di_IXMLNodeList xmlRootNode = pXmlDoc->DocumentElement->ChildNodes;//surely MainForm
, il semble que ->DocumentElement est NULL. Pourquoi? Qu'est-ce qu'il y a d'erroné dans ce code, ça me semble complet pour invoquer dynamiquement un XMLDocument!!!