Nu är jag här igen...
Jag får det verkligen inte att funka, och snart är det deadline. x(
Har suttit hela jäkla helgen, men fortfarande är det något som inte funkar.
Felmeddelandena är:
'IXMLDOMDocument2' : Cannot instantiate abstract class due following... <- Fel 1
'int __cdecl CoUninitialize(void)' : overloaded function differs only by return type from 'void __stdcall CoUninitialize(void)' <- Fel 2
'CoUninitialize' : redefinition; different type modifiers <- Fel 3
Här är min fil:
#ifndef _SODA_CXMLER_H
#define _SODA_CXMLER_H
#include "includes.h"
#include "StringStack.h"
typedef VARIANT_BOOL vbool;
typedef IXMLDOMDocument2 XmlerDocument;
typedef IXMLDOMNode XmlerNode;
typedef IXMLDOMElement XmlerElem;
typedef IXMLDOMNodeList XmlerNodeList;
typedef BSTR XmlerString;
HRESULT hResult = CoInitialize ( NULL );
class CXmler { // Klass som hanterar XML-filerna
private:
XmlerDocument xmlDoc; [b]// <-- Här kommer fel 1![/b]
string xmlFile;
StringStack xmlStack;
bool ExcHandl ( HRESULT hResult, char* exceptionError ) { // Funktion för att hantera exceptions från HRESULT
if ( FAILED ( hResult ) ) {
cout << "\n\n*** Error ***\n";
cout << exceptionError;
exit ( 1 );
}
return true;
}
void ExcHandl ( char* exceptionError ) { // Funktion för att hantera exceptions
cout << "\n\n*** Error ***\n";
cout << exceptionError;
exit ( 1 );
}
public:
CXmler () { // Konstruktor, sätter XML-filen från default (C:\CXmler.xml)
xmlFile.assign ( "C:\\CXmler.xml" );
}
CXmler ( char* newXmlFile ) { // Konstruktor, sätter angiven XML-fil
xmlFile.assign ( newXmlFile );
}
CXmler ( string newXmlFile ) { // Konstruktor, sätter angiven XML-fil
xmlFile.assign ( newXmlFile.c_str () );
}
~CXmler () { // Destruktor
}
void Open () { // Öppna dokumentet
if ( !xmlFile == NULL ) {
Open ( xmlFile.c_str () );
}
else {
ExcHandl ( "Du har inte angett någon XML-fil att öppna"); // Filen hittades inte
}
}
void Open ( char* newXmlFile ) { // Öppna en ny XML-fil om filen hittas
vbool vB = false;
ExcHandl ( xmlDoc.CoCreateInstance ( __uuidof ( DOMDocument ) ), "Kunde inte skapa XML-parser" );
ExcHandl ( xmlDoc->load ( newXmlFile, &vB ), "Kunde inte öppna den angivna XML-filen" );
if ( !vB ) {
ExcHandl ( "Kunde inte öppna den angivna XML-filen" ); // Filen kunde inte öppnas
}
}
void Open ( string newXmlFile ) { // Skickar vidare till Open ( char* )
Open ( newXmlFile.c_str () );
}
void Save () { // Spara XML-filen
Save ( xmlFile.c_str () );
}
void Save ( char* toXmlFile ) { // Spara till angiven XML-fil
ExcHandl ( xmlDoc->save ( toXmlFile ), "Kunde inte spara till den angivna XML-filen" );
}
void Save ( string toXmlFile ) { // Spara till angiven XML-fil
Save ( toXmlFile.c_str () );
}
StringStack getData ( char* cPath, char* cCompareElem, char* cCompareName ) { // Hämta data från XML-dokumentet
XmlerElem xmlElem;
XmlerNode xmlNode;
XmlerNodeList xmlList;
ExcHandl ( xmlDoc->selectSingleNode ( cPath, &xmlNode ), "Kunde inte hitta den angivna pathen" );
if ( xmlNode.p == NULL ) {
ExcHandl ( "Kunde inte hitta den angivna pathen" );
}
xmlElem = xmlNode;
if ( xmlElem.p == NULL ) {
ExcHandl ( "Kunde inte konvertera mellan element och node vid parsning" );
}
ExcHandl ( xmlElem->getElementByTagName ( cCompareElem, &xmlList ), "Kunde inte hitta de angivna elementen" );
if ( xmlList->length < 1 ) {
ExcHandl ( "Det angivna elementet hittades inte i pathen" );
}
xmlStack.set ( xmlList->length );
while ( ExcHandl ( xmlList->nextNode ( &xmlNode ), "Ett okänt fel inträffade" ) ) {
if ( xmlNode->nodeName == cCompareName ) {
xmlStack.push ( xmlNode->text );
}
}
return xmlStack;
}
string getData ( string sPath, string sCompareElem, string sCompareName ) { // Hämta data från XML-filen
return getData ( sPath.c_str (), sCompareElem.c_str (), sCompareName.c_str () );
}
string getNodeValue ( char* cPath ) { // Hämta nod-värde från angiven path
XmlerNode xmlNode;
XmlerString xmlText;
string xmlValue;
ExcHandl ( xmlDoc->selectSingleNode ( cPath, &xmlNode ), "Kunde inte hitta den angivna noden" );
if ( xmlNode.p == NULL ) {
ExcHandl ( "Kunde inte hitta den angivna noden" );
}
ExcHandl ( xmlNode->get_text ( &xmlText ), "Kunde inte hämta texten från den angivna noden" );
xmlValue.assign ( xmlText.value );
return xmlValue;
}
string getNodeValue ( string sPath ) { // Hämta nod-värde från angiven path
return getNodeValue ( sPath.c_str () );
}
void setNodeValue ( char* cPath, char* cValue ) { // Sätt nytt värde på angiven nod
XmlerNode xmlNode;
ExcHandl ( xmlDoc->selectSingleNode ( cPath, &xmlNode ), "Kunde inte hitta den angivna noden" );
if ( xmlNode.p == NULL ) {
ExcHandl ( "Kunde inte hitta den angivna noden" );
}
xmlNode->text = cValue;
}
void setNodeValue ( string sPath, string sValue ) { // Sätt värde på nod
setNodeValue ( sPath.c_str (), sValue.c_str () );
}
};
CoUninitialize (); [b]// <- Här kommer fel 2 & 3![/b]
#endif
Hoppas någon ( developer? :) ) har några tips att ge!
------------------
SPiN, bjorne.w@telia.com
-- En ask vet jag stånda - den Yggdrasil heter, ett väldigt träd överöst av vita sanden. --
[Redigerat av SPiN den 09 dec 2001]