SDL_bool SDL_GetWindowWMInfo(SDL_Window* window,
SDL_SysWMinfo* info)SDL_SysWMinfo* info的SDL_Version version成员必须在编译时由SDL_VERSION宏定义,然后才能传递。
为什么SDL_GetWindowWMInfo需要编译调用代码时使用的SDL版本?如果SDL_GetWindowWMInfo不检查SDL版本,会发生什么情况?
发布于 2016-09-17 11:18:21
就像凯尔塔说的那样。这是来自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在践踏程序内存之前检测到问题。
https://stackoverflow.com/questions/39313710
复制相似问题