我正在用C++制作一个2D引擎,我希望能够提供一个.dll和一个.lib,这样游戏就可以包含这些一切都很好,很棒。制作一个2D引擎:用引擎而不是游戏编译必要的库
我已经看了食人魔是怎么做的,并且它导致丑陋这样的:
#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++。
我认为我们没有足够的有关您正在做的事情的信息。你最终的目标是什么?你的意思是图书馆等等? – GManNickG 2009-11-03 09:34:09
我已经添加了更多信息。 :) – knight666 2009-11-03 10:03:39
我不知道完全了解问题,但为什么不创建该Visual Studio项目指出它将是一个库(动态或静态)?有什么问题?如果你想在Dll中导出类,你应该在类定义中添加__declspec(dllexport)。 – HyLian 2009-11-03 10:50:06