为什么SDL_GetWindowWMInfo()需要SDL版本?

时间:2016-09-04 05:05:49

标签: sdl-2

根据documentation

SDL_bool SDL_GetWindowWMInfo(SDL_Window*    window,
                             SDL_SysWMinfo* info)

SDL_SysWMinfo* info的{​​{1}}成员必须在传递之前在编译时由SDL_Version version宏定义。

为什么SDL_VERSION需要编译调用代码的SDL版本?如果SDL_GetWindowWMInfo没有检查SDL版本,会发生什么?

1 个答案:

答案 0 :(得分:2)

它非常像凯尔塔尔所说的。这是来自SDL_windowswindow.c:

SDL_bool
WIN_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
{
    const SDL_WindowData *data = (const SDL_WindowData *) window->driverdata;
    if (info->version.major <= SDL_MAJOR_VERSION) {
        info->subsystem = SDL_SYSWM_WINDOWS;
        info->info.win.window = data->hwnd;
        info->info.win.hdc = data->hdc;
        return SDL_TRUE;
    } else {
        SDL_SetError("Application not compiled with SDL %d.%d\n",
                     SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
        return SDL_FALSE;
    }
}

此函数填写用户提供的结构。危险在于,随着SDL中的平台支持发生变化,此结构可能会发生变化(与在新版本号中更明显的实际功能/ API更改相反)。

如果SDL版本之间的结构定义发生了变化(例如,您使用更新的标题但是旧的dll),则此要求允许SDL在踩踏您的程序内存之前检测问题。