我正在用 C++ 制作一个 2D 引擎,并且我希望能够提供一个 .dll 和一个 .lib 以便游戏可以只包含这些并且一切都很好而且花花公子。
我查看了 Ogre 是如何做到的,它会导致这样的丑陋:
#ifdef __cplusplus
extern "C" {
#endif
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char *argv[])
#endif
{
// Create application object
ShadowsApplication app;
try {
app.go();
} catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occured: " <<
e.getFullDescription().c_str() << std::endl;
#endif
}
return 0;
}
#ifdef __cplusplus
}
#endif
虽然我的引擎目前这样做:
MAIN
{
Game* game = Game::Create();
Engine::Init();
game->Init();
while (Engine::running)
{
if (Engine::PreRender())
{
game->Update();
Engine::Render();
}
Engine::ShutDown();
return 0;
}
}
这意味着一个干净的游戏看起来像这样:
class BouncingBalls : public Game
{
public:
BouncingBalls() { }
void Init();
void Update();
};
Game* Game::Create() { return (new BouncingBalls()); }
现在,一个主要缺点是:因为我是main
在引擎而不是游戏中定义的,所以我不能将所有必要的库都放在引擎中。每个游戏都必须加载一组特定的库,当该列表发生变化时,这将是地狱。
有没有办法保持这样的语法,同时在引擎而不是游戏中加载.lib?
提前致谢。
编辑:似乎事情还不清楚。我的最终目标是拥有一个包含所有引擎函数的 Visual Studio 项目,该项目编译为 .lib 或 .dll(不是 .exe)。如果有人想制作游戏,他可以简单地将Engine.lib 包含在他的项目中,并将Engine.dll 包含在他的项目文件夹中,然后开始。
启动一个新项目应该尽可能简单,而不必担心低级 C++。