这是我的代码:
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的依赖.工作正常,窗口出现.
但是真的很好吗?我失去了哪些功能呢?
SDL_main
用于SDL的自动初始化和清理.这主要是,这样你就不需要做手工,虽然它也经过对在那里的编译平台上的窗口应用程序中正确设置了一切努力,但它是精细到#define
宏SDL_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子系统.