Aktuelle Zeit: 21.04.2025, 13:09

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: XML Datei laden
BeitragVerfasst: 25.07.2007, 03:31 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
ich versuch vergebens eine xml datei zu laden, da ich es net geblickt hab wie man ganz normalb eine datei öffnet und sie zeilenweise einliest und als int in verschiedene variablem abspeichert, jedenfals das kommt dabei raus wenn ichs in xml versuch:

Code:
--------------------Konfiguration: Menue - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class irr::io::IIrrXMLReader<char,class irr::io::IXMLBase> * __cdecl irr::io::createIrrXMLReader(struct _iobuf *)" (?createIrrXMLReader@io@irr@@YAPAV?$IIrrXMLReader@DVIXMLBase@io@irr@@@12@
PAU_iobuf@@@Z)
Debug/Menue.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Menue.exe - 2 Fehler, 0 Warnung(en)




das nen ausschnitt des quellcodes:

Code:
   int tmpBreite, tmpHohe ,tmpTreiber, tmpBit;
   FILE* tmpDatei = fopen("settings.xml","r");
   IrrXMLReader* xml = createIrrXMLReader(tmpDatei);

   while (xml && xml->read())
   {
      switch (xml->getNodeType())
      {
         case EXN_ELEMENT:
         if (!strcmp("Auflosung", xml->getNodeName()))
         {
             tmpBreite      = xml->getAttributeValueAsInt("Breite");
             tmpHohe      = xml->getAttributeValueAsInt("Hohe");
             tmpBit         = xml->getAttributeValueAsInt("Bit");
             tmpTreiber      = xml->getAttributeValueAsInt("Treiber");//1 Direct, 2 OpenGl, 3 Softwarerendering
         }
      }
   }


und die xml datei:

Code:
<?xml version="1.0"?>
<config>
   <Auflosung Breite="400" Hohe="400" Bit="32" Treiber="1" />
</config>

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 12:20 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
also am code liegts nicht, sondern an einem "unaufgelösten symbol" .. der funktion createIrrXMLReader(...), die der linker anscheinend nicht kennt..
soweit ich sehen kann willst du in der xml-datei die parameter für den device festlegen. das problem dabei ist, dass du einen xml-reader dafür brauchst, der erst verfügbar wird, wenn der device erstellt wurde.. das zusätzliche linken der irrXML-lib bringt auch nichts. der trick besteht darin, einen null-device zu erstellen, mit dem die xml-datei lesen, den device schließen und einen neuen aufmachen.
der overhead ist echt minimal!

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 12:49 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
mhh problem is ich hab schon nen 0device hier der ganze code:

Code:
#include <irrlicht.h>
#include "NejiEngine.h"
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#pragma comment(lib, "Irrlicht.lib")
//#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
IrrlichtDevice *device = 0;
int MenueAuswahl;
int MenueAuswahlV;
Position Pos;
class MyEventReceiver : public IEventReceiver
{
public:
   virtual bool OnEvent(SEvent event)
   {
      if (event.EventType == irr::EET_KEY_INPUT_EVENT &&   !event.KeyInput.PressedDown)
      {
         switch(event.KeyInput.Key)
         {
            case KEY_KEY_W:
            case KEY_KEY_S:
            {
               event.KeyInput.Key == KEY_KEY_S ? MenueAuswahl = MenueAuswahl + 1 : MenueAuswahl = MenueAuswahl - 1;
               
               if(MenueAuswahl == -1)
               {
                  MenueAuswahl = 2;
                  break;
               }
               if(MenueAuswahl == 3)
               {
                  MenueAuswahl = 0;
                  break;
               }
               break;
            }
            case KEY_KEY_A:
               if(MenueAuswahlV > 0)
               {
                  MenueAuswahlV = MenueAuswahlV - 1;
               }
               break;
            case KEY_KEY_D:
            {
               if(MenueAuswahl == 1 && MenueAuswahlV == 0)
               {
                  MenueAuswahlV = MenueAuswahlV + 1;
                  if(MenueAuswahlV == -1)
                  {
                     MenueAuswahlV = 2;
                     break;
                  }
                  if(MenueAuswahlV == 3)
                  {
                     MenueAuswahlV = 0;
                     break;
                  }
               }
               break;
            }

            case KEY_ESCAPE:
            {
               if(MenueAuswahlV > 0)
               {
                  MenueAuswahlV = MenueAuswahlV - 1;
               }
               else
               {
                  Exit();
               }
               break;
            }
            case KEY_RETURN:
            {
               switch (MenueAuswahl)
               {
                  case 0:
                  {
                     if(MenueAuswahlV == 0)//Spielen
                     {
                     //InitSpiel<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                     }
                     if(MenueAuswahlV == 1)//Grafik
                     {
                        system("C:\\Einstellungen.exe");
                     }
                     break;
                  }
                  case 1:
                  {
                     if(MenueAuswahlV == 0)//Optionen
                     {
                        MenueAuswahlV = 1;
                     }
                     if(MenueAuswahlV == 1)//Sound
                     {
                        
                     }
                     break;
                  }
                  case 2:
                  {   
                     if(MenueAuswahlV == 0)//Beenden
                     {
                        Exit();
                     }
                     if(MenueAuswahlV == 1)//Eingabe
                     {
                        
                     }
                     break;
                  }
               };
            }
            return true;
         }
      }
      return false;
   }
void Exit(void);
};

MyEventReceiver Receiver;

int main()
{

   int tmpBreite;
   int tmpHohe;
   int tmpTreiber;
   int tmpBit;
   //FILE* tmpDatei = fopen("config.xml","r");
   IrrXMLReader* xml = createIrrXMLReader("config.xml");

   while (xml && xml->read())
   {
      switch (xml->getNodeType())
      {
         case EXN_ELEMENT:
         if (!strcmp("Auflosung", xml->getNodeName()))
         {
             tmpBreite = xml->getAttributeValueAsInt("Breite");
             tmpHohe = xml->getAttributeValueAsInt("Hohe");
             tmpBit   = xml->getAttributeValueAsInt("Bit");
             tmpTreiber   = xml->getAttributeValueAsInt("Treiber");//1 Direct, 2 OpenGl, 3 Softwarerendering
         }
      }
   }
   
   device = createDevice(EDT_OPENGL, dimension2d<s32>(tmpBreite, tmpHohe), tmpBit,   false, false, false, &Receiver);
   device->setWindowCaption(L"Menue Test");
   IVideoDriver* driver = device->getVideoDriver();
   ISceneManager* smgr = device->getSceneManager();
   IGUIEnvironment* guienv = device->getGUIEnvironment();

   while(device->run())
   {
      guienv->clear();
      driver->beginScene(true, true, SColor(200,140,101,140));
      NHauptmenu(NPos(0,0,0,0),MenueAuswahlV,device,MenueAuswahl);

      smgr->drawAll();

      guienv->drawAll();

      driver->endScene();

   }
   delete xml;
   device->drop();
return 0;

}
void MyEventReceiver::Exit(void)
{
   device->closeDevice() ;
}


_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:21 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
??? also soweit ich sehen kann nicht..
ich meine so:
Code:
//...
int main(){
//...
IrrlichtDevice* device = createDevice(EDT_NULL);
IrrXMLReaderUTF8* xml = device->getFileSystem()->createIrrXMLReaderUTF8("config.xml");
//...
xml->drop();
device->drop();
device = createDevice(tmpTreiber,/*...*/);
//...
device->drop();
}

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:27 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
mhhh funtzt bei mir irgentwie net
Code:
--------------------Konfiguration: Menue - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
Compiling Irrlicht with Visual Studio 6.0, support for DX9 is disabled.
c:\dokumente und einstellungen\flo\eigene dateien\c++projekte\menue\main.cpp(13) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'
c:\dokumente und einstellungen\flo\eigene dateien\c++projekte\menue\main.cpp(13) : error C2501: 'IrrXMLReaderUTF8' : Fehlende Speicherklasse oder Typbezeichner
c:\dokumente und einstellungen\flo\eigene dateien\c++projekte\menue\main.cpp(13) : error C2501: 'xml' : Fehlende Speicherklasse oder Typbezeichner
c:\dokumente und einstellungen\flo\eigene dateien\c++projekte\menue\main.cpp(13) : error C2039: 'createIrrXMLReaderUTF8' : Ist kein Element von 'IFileSystem'
        c:\dokumente und einstellungen\flo\eigene dateien\visual studio 2005\3d engine\include\ifilesystem.h(34) : Siehe Deklaration von 'IFileSystem'
c:\dokumente und einstellungen\flo\eigene dateien\c++projekte\menue\main.cpp(141) : error C2227: Der linke Teil von '->read' muss auf Klasse/Struktur/Union zeigen
c:\dokumente und einstellungen\flo\eigene dateien\c++projekte\menue\main.cpp(141) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
Fehler beim Ausführen von cl.exe.

Menue.exe - 6 Fehler, 0 Warnung(en)

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:41 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
uhhhh
aiaiai
ich hab ausm gedächtnis geschrieben.. schleeeecht!!
es muss natürlich statt IrrXMLReaderUTF8 IXMLReaderUTF8 heißen...

tschuldige..

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:44 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
naja fast eins noch

Code:
C:\Dokumente und Einstellungen\Flo\Eigene Dateien\C++Projekte\Menue\main.cpp(13) : error C2039: 'createIrrXMLReaderUTF8' : Ist kein Element von 'IFileSystem'
        c:\dokumente und einstellungen\flo\eigene dateien\visual studio 2005\3d engine\include\ifilesystem.h(34) : Siehe Deklaration von 'IFileSystem'

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:51 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
uii ja auch falsch erinnert:
muss heißen createXMLReaderUTF8

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:53 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
och nö "Menue.exe hat ein problem festgestellt und musste beendet werden."

muhaha ma den ganzen pfad angeb net nur die datei
"C:\\Dokume~1\\Flo\\Eigene~1\\C++Projekte\\Menue\\Debug\\config.xml"

:P thx

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 25.07.2007, 13:59 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
kp immer gern
hab mich mal in deinem gästebuch verewigt ;)

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 20.08.2007, 19:31 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
thx 4 gästebuch aber:

Code:
int CDevice::LoadConfig(core::stringc fn, sGamestruct &SD,GameEventReceiver CEvent)
{
   stringc path = SD.FileSystem->getWorkingDirectory();
   path += fn.c_str();
   IXMLReader *xml = SD.FileSystem -> createXMLReader(path.c_str());
   
   int Treiber;
   int Breite;
   int Hohe;
   int Bit;
   video::E_DRIVER_TYPE driverType;

   while (xml && xml->read())
      {
      core::stringc node = xml->getNodeName();
         switch (xml->getNodeType())
         {
            case EXN_ELEMENT:
            if (node == "Auflosung")
            {
                Breite = xml->getAttributeValueAsInt(L"Breite");
                Hohe   = xml->getAttributeValueAsInt(L"Hohe");
                Bit   = xml->getAttributeValueAsInt(L"Bit");
            }
            if (node == "Rendern")
            {
               Treiber   = xml->getAttributeValueAsInt(L"Treiber");//1 Direct, 2 OpenGl, 3 Softwarerendering
            }
         }
      }
   xml -> drop();

   switch(Treiber)
   {
      case 1:
         driverType = video::EDT_DIRECT3D9;
         break;
      case 2:
         driverType = video::EDT_OPENGL;
         break;
      case 3:
         driverType = video::EDT_SOFTWARE;
         break;
   };
   SD.Device -> drop();
   SD.Device = createDevice(driverType,dimension2d<s32>(Breite,Hohe),Bit,false,false,false,&CEvent);
   return 0;
};



löst nen debugfehler aus


Code:
Eine Ausnahme (erste Chance) bei 0x00437306 in SpacePirates.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000004.
Unbehandelte Ausnahme bei 0x00437306 in SpacePirates.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000004.


und zeigt mir den code an:

Code:
bool drop()
      {
         _IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0) // someone is doing bad reference counting.

         --ReferenceCounter;
         if (!ReferenceCounter)
         {
            delete this;
            return true;
         }

         return false;
      }

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: XML Datei laden
BeitragVerfasst: 21.08.2007, 17:20 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
jaa das problem hat ich auch mal, ein segmentation fault der vom --ReferenceCounter ausgelöst wird.. ich weiß nur nciht mehr wie ich das gelöst bekommen hab..
irgendein aufruf von drop() auf ein schon gelöschtes objekt..? also ich kann dir da grad auch nicht weiterhelfen..

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de