Bonjour,
Je vous explique la situation:
Je code une sorte d'interface graphique pour un jeu avec Ogre.
Lorsqu'on ajoute des objets dans le SceneGraph il donne la possibilite d'affecter a l'entite un objet personnel pour peu qu'il herite d'une classe.
J'ai cree une classe ZResource et ZPlayer qui heritent toute deux de la classe:
UserDefinedObject:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class ZResource: public ZHasDisplayableObject, public ZHasDescription, public Ogre::UserDefinedObject
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class _OgreExport UserDefinedObject { public: UserDefinedObject(); virtual ~UserDefinedObject() {} virtual const String& getTypeName(void) const; virtual long getTypeID(void) const; };
que j'ai redefinis dans mon code comme ceux ci:
Meme si je doute que se soit interressant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 const Ogre::String& ZResource::getTypeName(void) const { return ZResource::TYPE_STRING; } long ZResource::getTypeID(void) const { return RESOURCE_TYPE; }
lorsque j'ajoute un element a ma liste je fait ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void ZScene::addResourceToScene(ZResource *disp) { this->addEntityToScene(disp); disp->getDisplayableObject()->getEntity()->setUserObject(reinterpret_cast<Ogre::UserDefinedObject *> (disp)); }
et au clic:
et sur le std::cout j'ai cette erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Ogre::MovableObject *mov = (*it).movable; .... Ogre::UserDefinedObject *u = mov->getUserObject(); std::cout << "id de lobjet = " << u->getTypeName() << std::endl;
Et en debugant je vois que lors de l'appel a la methode il appel une autre methode a savoir setVisible d'une autre interface (ZHasDisplayableObject)Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Donc voila je ne comprends pas comment ca a pu se passer.
A savoir que j'ai fait plusieurs rebuild, en debug et en release, j'ai le meme probleme ...
Si qqun a une idee ca m'aiderais beaucoup
Merci d'avance
Partager