SDL_bool SDL_GetWindowWMInfo(SDL_Window* window,
SDL_SysWMinfo* info)
SDL_SysWMinfo* info
的{{1}}成员必须在传递之前在编译时由SDL_Version version
宏定义。
为什么SDL_VERSION
需要编译调用代码的SDL版本?如果SDL_GetWindowWMInfo
没有检查SDL版本,会发生什么?
答案 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在踩踏您的程序内存之前检测问题。