Article View: fr.comp.text.xml
Article #10400Re: "Caster" une interface "node" en interface "element" dans le DOM microsoft?
From: Mathieu Poumeyrol
Date: Mon, 16 Oct 2000 00:00
Date: Mon, 16 Oct 2000 00:00
56 lines
3262 bytes
3262 bytes
Bon, c'est pas vraiment une question XML, mais je vais repondre quand meme...
On Sun, 15 Oct 2000 08:25:23 +0200,
Jean-Philippe BRUNET <jean-philippe.brunet@libertysurf.fr> wrote:
>Je travaille en C++ en environnement Microsoft.
>Quelqu'un sait-il comment on peut r�cup�rer une interface
>MSXML2::IXMLDOMElement � partir d'une interface MSXML2::IXMLDOMNode bien sur
>quand le "node" est un "�l�ment".
>La doc dit que IXMLDOMElement h�rite deIXMLDOMNode mais je ne connais pas
>la formule magique pour "caster" un objet interface en un autre (un "cast"
>C++ standard crashe m�chamment).
>
>HRESULT hr;
>bstr_t str = "/root/table";
> MSXML2::IXMLDOMNodeList *list ;
> MSXML2::IXMLDOMNode *item ;
> MSXML2::IXMLDOMElement *element ;
> hr= m_XmlDom->selectNodes(str,&list);
> ASSERT(hr== S_OK) ;
> long len ;
> list->get_length(&len) ;// V�rifie que l'on a deux tables
> for(int i=0;hr== S_OK && i< len ;i++){ // Accede aux deux tables
>successivement
> BSTR src ;
> hr = list->get_item(i,&item);// R�cup�re un NODE, tout va bien
> ASSERT(hr== S_OK) ;
> hr= item->get_nodeType(&nodeType);// Verifie que le node est bien un
>�l�ment, ca va toujours
> ASSERT(hr== S_OK) ;
> ASSERT(nodeType == NODE_ELEMENT);
> //********************************************************
> // ***** A partir de l�, je d�croche, il faudrait r�cup�rer l'�l�ment.
>HELP!****
> //********************************************************
> // j'ai essay� histoire de rigoler
> // element = (MSXML2::IXMLDOMElement *) item ;
> //Ca plante violent
> // Que faire en fait. il doit bien exister une formule magique pour
>"caster" une interface dans un de ses descendants
> //ou une facon en DOM de reconstruire un �l�ment existant.
ce sont des objets COM, il faut donc utiliser QueryInterface pour caster
essayes quelque chose du genre (de tete, hein, je suis pas sur que ca
compile en l'etat)
hr = item->QueryInterface(__uuidof(IXMLDOMElement), (void**)&element);
Je te conseille aussi d'utiliser
ASSERT(SUCCEEDED(hr)) plutot que ASSERT(hr == S_OK);
Enfin lorsqu'on veut down-caster des object C++, il est preferable d'utiliser
le cast dynamique au lieu du cast statique (mais pour les objets COM, le
query interface est obligatoire).
--
Mathieu Poumeyrol
Technical Details
Message-ID:
<slrn8uld5q.qap.kali@zen.via.ecp.fr>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<8sbi8m$18l4$1@news5.isdnet.net>Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,ASCII X-Google-Thread: 114f60,6013863413d8b177 X-Google-Attributes: gid114f60,public From: kali@via.ecp.fr (Mathieu Poumeyrol) Subject: Re: "Caster" une interface "node" en interface "element" dans le DOM microsoft? Date: 2000/10/16 Message-ID: <slrn8uld5q.qap.kali@zen.via.ecp.fr> X-Deja-AN: 681967780 Content-Transfer-Encoding: 8bit References: <8sbi8m$18l4$1@news5.isdnet.net> Content-Type: text/plain; charset=iso-8859-15 X-Complaints-To: ingesys@cti.ecp.fr X-Trace: smilodon.ecp.fr 971683002 12007 138.195.130.71 (16 Oct 2000 07:56:42 GMT) Organization: Ecole Centrale Paris : Grde Voie des Vignes, 92295 Chatenay-Malabry Cdx Mime-Version: 1.0 User-Agent: slrn/0.9.6.2 (Linux) Reply-To: kali@via.ecp.fr NNTP-Posting-Date: 16 Oct 2000 07:56:42 GMT Newsgroups: fr.comp.text.xml