私が構築しているフレームワークがあり、他のプロジェクトで使用するために静的ライブラリにコンパイルされています。ライブラリは問題なく完全に動作します。問題は、ライブラリを使用するプロジェクトのリンク時間が非常に長いことです。そのため、同じフレームワークの 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 インクルードの 1 つをコメント解除して DLL を再度コンパイルするとすぐに、DLL を使用するプロジェクトでアサーション エラーが発生します。詳細については、Ogre フォーラムの投稿を参照してください。最初に質問を投稿しましたが、実際にはOgre固有の質問ではないので、ここでも試してみようと思いました. Ogre の投稿へのリンクは次のとおりです。
http://www.ogre3d.org/forums/viewtopic.php?f=2&t=58403
前もって感謝します