我有一个正在构建的框架,并且正在编译成一个静态库以供其他项目使用。该库完美运行,没有问题。问题是使用该库的项目的链接时间很长,所以我想我会制作一个相同框架的 DLL 项目。我从小步骤开始,通过 Visual Studio 创建了一个 MFC 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()
{
}
}
正如你所看到的,我已经注释掉了 Ogre 包含的内容。当一个项目使用编译后的 DLL 并构造这个(OgreCore)类时,它工作得非常好。一旦取消注释其中一个 Ogre 包含并再次编译 DLL,使用 DLL 的项目现在会给出断言错误。完整的详细信息可以在 Ogre 论坛帖子中找到。我首先在那里发布了这个问题,但由于它不是一个真正的 Ogre 特定问题,我想我也会在这里尝试。食人魔帖子的链接是:
http://www.ogre3d.org/forums/viewtopic.php?f=2&t=58403
先感谢您