【问题标题】:Do I need SDL's main() function?我需要 SDL 的 main() 函数吗?
【发布时间】:2016-11-16 00:40:57
【问题描述】:

我正在考虑使用我自己的私有语言的 SDL2。他们可以与 SDL2.dll 等动态库进行通信,因此这可能是可行的。但首先我需要使用 C 进行尝试。

但是,一个 hello-world 风格的教程是难以捉摸的(它们适用于错误的 SDL 版本,或者它们使用 C++ 或其他语言)。不过最后我整理了一个最小程序(只需 #include "sdl.h" 和 main(){} 会显示问题),我无法链接,因为我没有 main() 或 WinMain()。

我了解 SDL.h 或其他一些头文件重新定义了我的“main”,因为它想使用自己的 main() 例程。这可能存在于 SDL 的一些静态链接库中,因为它不能位于 SDL2.dll 中。我没有那个库,也看不到任何获取它的意义,因为我无法用我自己的语言使用它(它也将是特定于实现的,甚至作为源代码提供,在这种情况下忘记它!)。

通过添加“#undef main”,我设法让一个基本的测试程序正常工作。

但是,我的问题是,SDL 的 main() 中是否有我需要的重要内容,或者将来可能会咬我?或者没有它我可以逃脱吗? (为什么 SDL 不只依赖一些 SDL_init() 例程让我从我的 main() 调用?)

(我注册了 SDL 论坛来询问这个问题,但显然他们不允许我发帖,因为我没有适当的权限。那么注册的意义何在?!)

【问题讨论】:

  • 谢谢。这最终导致建议在源代码中查看“SDL_main.c”,这告诉我,除了与命令行解析有关的内容外,它还调用 SDL_SetMainReady()。那是如果它是正确的版本,但是SDL2.dll中有这样一个函数,所以如果我遇到问题,我可以尝试调用它。

标签: c sdl-2


【解决方案1】:

您应该在包含SDL.h 之前使用#define SDL_MAIN_HANDLED 而不是#undef main(或通过编译器标志定义它)。

如果你实现自定义主函数,你至少应该调用SDL_SetMainReady。对于某些平台,SDL 会执行额外的操作,例如设置特定的异常处理程序、将参数转换为 UTF8 或完全不同的东西(例如,对于 android,它并不是真正的 main 函数而是 JNI 函数)。

SDL2main 库中定义的 SDL 入口点,并不真正了解您为“没有它”做了什么(除了手动删除它)。您可以随时从 libsdl.org 下载存档或自行构建。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 2017-01-11
    • 2015-07-12
    • 1970-01-01
    • 2023-02-07
    • 2015-09-12
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多