J'ai une structure que je construis et qui est compilée dans une bibliothèque statique pour être utilisée par d'autres projets. La bibliothèque fonctionne parfaitement sans problèmes. Le problème est que le temps de lien est très long pour les projets qui utilisent la bibliothèque, donc j'ai pensé que je ferais un projet DLL du même framework. J'ai commencé avec les étapes de bébé et ai créé un projet de DLL de MFC par le studio visuel. Le projet a l'en-tête suivant:La compilation d'une DLL qui contient Ogre3D donne une erreur d'assertion quand elle est utilisée
/// --------------------------------------------
#ifndef OGRECORE_H
#define OGRECORE_H
#ifdef OGREFW_EXPORT
#define OGREFW_DLL __declspec(dllexport)
#else
#define OGREFW_DLL __declspec(dllimport)
#endif
class OgreRoot;
namespace OgreFW
{
class OGREFW_DLL OgreCore// : public OIS::KeyListener, public OIS::MouseListener
{
public:
OgreCore();
~OgreCore();
};
};
#endif // OGRECORE_H
et c'est la source
#include "stdafx.h"
#include "OgreCore.h"
//#include "Ogre.h"
//#include "OgreRoot.h"
//#include "OgreRenderWindow.h"
//#include "OgreLog.h"
//#include "OgreLogManager.h"
//#include "OgreOverlay.h"
//#include "OgreViewport.h"
//#include "OgreRenderWindow.h"
//#include "OgreFrameListener.h"
//#include "OgreWindowEventUtilities.h"
//#include "OgreSceneNode.h"
//#include "OgreEntity.h"
//#include "OgreManualObject.h"
//#include "OgreMeshManager.h"
//#include "OgreConfigFile.h"
//#include "OgreOverlayContainer.h"
//#include "OgreOverlayManager.h"
namespace OgreFW
{
OGREFW_DLL
OgreCore::OgreCore()
{
}
// ------------------------
OGREFW_DLL
OgreCore::~OgreCore()
{
}
}
Comme vous pouvez le voir, je l'ai commenté Ogre comprend. Lorsqu'un projet utilise la DLL compilée et construit cette classe (OgreCore), cela fonctionne parfaitement. Dès que vous supprimez un commentaire de l'Ogre et compilez la DLL à nouveau, le projet qui utilise la DLL génère maintenant une erreur d'assertion. Les détails complets peuvent être trouvés ici dans le post du forum Ogre. J'ai posté la question d'abord mais comme ce n'est pas vraiment une question spécifique à l'ogre, j'ai pensé que je vais essayer ici aussi. Le lien vers le poste Ogre est:
http://www.ogre3d.org/forums/viewtopic.php?f=2&t=58403
Nous vous remercions à l'avance