2

私が構築しているフレームワークがあり、他のプロジェクトで使用するために静的ライブラリにコンパイルされています。ライブラリは問題なく完全に動作します。問題は、ライブラリを使用するプロジェクトのリンク時間が非常に長いことです。そのため、同じフレームワークの 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

前もって感謝します

4

1 に答える 1

1

最後にここで解決策を見つけまし

簡単に説明すると、私が作成していた DLL は DLL メインのない非 MFC DLL である必要がありますが、Visual Studio は MFC DLL テンプレートを提供してくれます。

于 2010-08-31T15:04:02.500 に答える