当前位置:  开发笔记 > 编程语言 > 正文

我正在使用SDL函数而不定义SDL_main.那很好吗?

如何解决《我正在使用SDL函数而不定义SDL_main.那很好吗?》经验,为你挑选了1个好方法。

这是我的代码:

Lib.h

#ifdef ExportLib
    #define Lib __declspec(dllexport)
#else
    #define Lib __declspec(dllimport)
#endif
extern void Lib Launch();

Lib.cpp

#include 
#include "Lib.h"
void Launch() {
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Window* win = SDL_CreateWindow("Untitle", 100, 100, 400, 400, 0);
    SDL_DestroyWindow(win);
    SDL_Quit();
}

我将此代码构建到静态库.然后我创建了一个新的源文件并使用了这个库.

main.cpp中

#include "Lib.h"

int main() {
    Launch();
    return 0;
}

最后,我使用我的静态库编译main.cpp,而不定义SDL_main和SDL的依赖.工作正常,窗口出现.

但是真的很好吗?我失去了哪些功能呢?



1> jaggedSpire..:

SDL_main用于SDL的自动初始化和清理.这主要是,这样你就不需要做手工,虽然它也经过对在那里的编译平台上的窗口应用程序中正确设置了一切努力,但它是精细到#defineSDL_MAIN_HANDLED之前#include荷兰国际集团SDL.h,这将防止SDL main变成宏SDL_main只需确保在您自己的代码中正确初始化并退出SDL.

如果你想确保你正在进行必要的初始化,你可以检查源代码并模拟那里的内容.

编辑:

在某些平台上,如果您不使用,SDL_Init将失败SDL_main.您可以通过SDL_SetMainReady之前调用来禁用此故障SDL_Init,但请注意这将禁用SDL的错误处理,如果您在调用后SDL_SetMainReady未正确初始化SDL,则无法获得最清晰的错误消息.

退出SDL 要简单得多(如果你不使用SDL_main,还需要完成):

只需SDL_Quit在完成SDL后拨打电话即可.这将正确关闭当前活动的任何SDL子系统.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有