2010-06-15 68 views
2

我有一個構建的框架正在編譯爲靜態庫供其他項目使用。圖書館完美無缺地工作。問題是,使用該庫的項目的鏈接時間非常長,所以我想我會製作一個相同框架的DLL項目。我從嬰兒步驟開始,並通過visual studio創建了一個MFC DLL項目。該項目具有以下標題:編譯包含Ogre3D的DLL在使用時會出現斷言錯誤

/// -------------------------------------------- 

#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 

,這是源

#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() 
{ 

} 
} 

正如你可以看到我已經註釋掉食人魔包括。當一個項目使用編譯的DLL並構建這個(OgreCore)類時,它工作得很好。一旦取消註釋其中一個Ogre包含並再次編譯該DLL,則使用該DLL的項目現在會發出斷言錯誤。完整的細節可以在Ogre論壇帖子中找到。我先在那裏發佈了這個問題,但是因爲它不是一個真正的Ogre特定問題,我想我也會在這裏嘗試。在食人魔後的鏈接是:

http://www.ogre3d.org/forums/viewtopic.php?f=2&t=58403

預先感謝您

回答

1

終於找到了解決辦法HERE

簡短的解釋是,我創建的DLL應該是一個非MFC DLL沒有DLL主,但Visual Studio給了我一個MFC DLL模板。