2016-11-16 35 views
0

我在寻找可能使用我自己的私人语言的SDL2。他们可以与动态库(如SDL2.dll)交谈,以便可行。但首先我需要使用C来试用它。我是否需要SDL的main()函数?

但是,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论坛注册以询问这个问题,但显然他们不允许我因为我没有正确的权限,所以注册点是什么?!)

+0

请参阅:http://stackoverflow.com/questions/11976084/why-sdl-defines-main-macro – Fang

+0

谢谢。这最终导致建议查看源文件中的'SDL_main.c',这告诉我,除了与命令行解析有关的东西外,它会调用SDL_SetMainReady()。这就是如果它是正确的版本,但SDL2.dll中有这样的功能,所以如果遇到问题,我可以尝试调用它。 – bartc

回答

0

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

如果你实现自定义主功能,你至少应该拨打SDL_SetMainReady。对于某些平台,SDL执行额外的操作,例如设置特定的异常处理程序,将参数转换为UTF8,或者完全不同的东西(例如,对于android而言它并不是一个主要的JNI函数)。

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

相关问题