msxml



  • Ich möchte eine XML datei auslesen mit folgendem code. Es gibt aber noch Fehler Muß ich die msxml2.idl selber einbinden oder geht das automatisch (bin neu in c++)

    Wie muß ich die Variablen hr und Result deklarieren

    { 
     ::CoInitialize(NULL); 
     // Create an instance of DOMDocument and initialize pIXMLDOMDocument. 
     hr = CoCreateInstance(CLSID_DOMDocument2, NULL, CLSCTX_SERVER, 
                     IID_IXMLDOMDocument2, (LPVOID*)(&pIXMLDOMDocument)); 
     // Load/create an XML fragment. 
     pIXMLDOMDocument->put_async(VARIANT_FALSE); // default - true, 
    
     pIXMLDOMDocument->load(_variant_t("xmlDatei"), &dwBytes); 
     if(Result !=VARIANT_TRUE) 
     { 
       printf("Failed to load xml"); 
       return FALSE; 
    } 
    }
    catch( char * str )
        {
            cout << "Exception raised: " << str << '\n';
        }
    

    Fehlermeldungen

    C:\GFil\comp\test\test\testquell.cpp(126) : error C2065: 'hr' : nichtdeklarierter Bezeichner
    C:\GFil\comp\test\test\testquell.cpp(131) : error C2664: 'load' : Konvertierung des Parameters 2 von 'unsigned long *' in 'short *' nicht moeglich
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    C:\GFil\comp\test\test\testquell.cpp(132) : error C2065: 'Result' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.



  • Habe jetzt nur noch folgende Fehlermeldungen

    C:\GFil\comp\test\test\testquell.cpp(130) : error C2065: 'hr' : nichtdeklarierter Bezeichner
    C:\GFil\comp\test\test\testquell.cpp(135) : error C2664: 'load' : Konvertierung des Parameters 2 von 'unsigned long *' in 'short *' nicht moeglich
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    C:\GFil\comp\test\test\testquell.cpp(136) : error C2065: 'Result' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.



  • Wenn man neu in C++ ist macht man nicht solche schwierigen Sachen.



  • Ich habe alles soweit hinbekommen bis auf (Programmiere seit 20 Jahren nur eben nicht in c++)

    Wie deklariere ich die Variablen hr,result und dwbytes richtig.

    dwbytes(also den Inhalt der XML-Datei) möchte ich in einer Datei speichern.
    Etwas passt an dem Code nicht

    FILE *file=fopen("halal.txt", "w+b"); 
    fwrite(&dwBytes, 4, 2, file); 
    fclose (file);
    

    Danke für die Mühe
    mww

    Edit:......................
    Ich habe jetzt alles deklariert und es läuft (nur das Ergebnis stimmt noch nicht), bin mir aber nicht sicher, ob das die sinnvollsten Lösungen sind. Wäre also trotzdem für eure Lösungen dankbar 😋



  • mww schrieb:

    Edit:......................
    Ich habe jetzt alles deklariert und es läuft (nur das Ergebnis stimmt noch nicht), bin mir aber nicht sicher, ob das die sinnvollsten Lösungen sind. Wäre also trotzdem für eure Lösungen dankbar 😋

    wie hat das ein anderer hier im forum so treffend gesagt?

    "sorry aber meine kristallkugel is heute kaputt"

    woher solln wir denn wissen wie das ergebnis aussieht und wie es aussehen soll?



  • Mit Ergebnis meine ich, daß das Program zwar fehlerfrei kompiliert wird. Nur es werden definitiv nicht die XML-Daten in die Datei geschrieben. Irgendwas stimmt bei den 2 obigen Quellcodes nicht.



  • untersuch halt mal die inhalte der variablen im speicher indem du breakpoints setzt



  • Die Variable &dwBytes in der die xml-Daten enthalten sind, wird falsch gespeichert. Die zweite Zeile im folgendem Quellcode ist das Problem. Ich weiß aber nicht wie man diese Variable richtig speichert

    FILE *file=fopen("halal.txt", "w+b"); 
    fwrite(&dwBytes, 4, 2, file); 
    fclose (file);
    


  • benutz fstream, das ist der C++ weg.



  • probier mal so:

    #include <atlcomcli.h>
    #include <msxml2.h>
    
    #include <iostream>
    #include <exception>
    
    class HRTester
    {
    public:
    	HRTester()
    	{
    	}
    
    	HRTester(HRESULT hr)
    	{
    		test(hr);
    	}
    
    	HRTester &operator=(HRESULT hr)
    	{
    		test(hr);
    		return *this;
    	}
    
    private:
    	void test(HRESULT hr)
    	{
    		if(FAILED(hr))
    			throw hr;
    	}
    };
    
    int main()
    {
    	::CoInitialize(NULL); 
    	try
    	{
    
    		HRTester hr;
    
    		CComPtr<IXMLDOMDocument2> xmlDoc;
    
    		hr = xmlDoc.CoCreateInstance(__uuidof(DOMDocument));
    		hr = xmlDoc->put_async(VARIANT_FALSE);
    
    		VARIANT_BOOL b;
    		hr = xmlDoc->load(CComVariant(L"xmlDatei"), &b);
    		if(!b)
    		{
    			throw std::logic_error("Failed to load xml");		
    		}
    
    	}
    	catch(const std::exception &e)
    	{
    		std::cerr << "error : " << e.what();
    	}
    	catch (HRESULT hr)
    	{
    		std::cerr << "error. hr = " << hr;
    	}
    	::CoUninitialize();
    }
    


  • Erstmal vielen Dank

    Das Programm läuft bei mir nicht, wahrscheinlic wegen der fehlenden <atlcomcli.h>



  • mww schrieb:

    Erstmal vielen Dank

    Das Programm läuft bei mir nicht, wahrscheinlic wegen der fehlenden <atlcomcli.h>

    compiler?
    version?



  • @ssm

    Ich habe Microsoft Visual c++ 6.00

    Wie schreibt man den die Variable &b, aus deinem Quellcode, in der die XML Daten sind, in eine Datei ?


Anmelden zum Antworten