2010-06-15 2 views
2

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

Répondre

1

a finalement trouvé la solution HERE

Brève explication est que la DLL je créais devrait être un non-MFC DLL sans une DLL principale, mais Visual Studio me donne un modèle de DLL MFC.

Questions connexes