我正在考虑使用我自己的私有(private)语言中的 SDL2。他们可以与 SDL2.dll 等动态库对话,因此这可能是可行的。但首先我需要使用 C 来尝试一下。
但是,hello-world 风格的教程难以捉摸(它们适用于错误的 SDL 版本,或者它们使用的是 C++ 或其他语言)。最后,我整理了一个最小程序(只需 #include "sdl.h"和 main(){} 就会显示问题),并且我无法链接,因为我没有 main() 或 WinMain()。
我知道 SDL.h 或其他 header 重新定义了我的“main”,因为它想使用自己的 main() 例程。它可能存在于 SDL 的某个静态链接库中,因为它不能位于 SDL2.dll 内。我没有该库,并且看不到获取它的任何意义,因为我无法以自己的语言使用它(它也将是特定于实现的,甚至作为源代码出现,在这种情况下忘记它!)。
我设法通过添加“#undef main”来使基本测试程序正常工作。
但是,我的问题是,SDL 的 main() 中是否有任何我需要的基本内容,或者将来可能会困扰我的内容?或者没有它我可以逃脱吗? (为什么 SDL 不只依赖于某些 SDL_init() 例程供我从 main() 调用?)
(我注册了 SDL 论坛来询问这个问题,但显然他们不允许我发帖,因为我没有正确的权限。那么注册的意义何在?!)
最佳答案
而不是 #undef main
你应该#define SDL_MAIN_HANDLED
在包含 SDL.h
之前(或通过编译器标志定义它)。
如果您实现自定义主函数,您至少应该调用 SDL_SetMainReady
。对于某些平台,SDL 执行额外的操作,例如设置特定的异常处理程序、将参数转换为 UTF8 或完全不同的操作(例如,对于 android,它实际上并不是一个 main 函数,而是 JNI 函数)。
SDL2main
中定义的 SDL 入口点库,不太明白你做了什么“没有它”(除了手动删除它)。您始终可以从 libsdl.org 下载存档或自己构建。
关于c - 我需要 SDL 的 main() 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40622215/