如果给定的RegisterClassEx()调用成功一次,我可以假设它总是会吗?

时间:2014-01-26 18:10:59

标签: c++ winapi error-handling initialization

出于好奇:

在我的wWinMain()入口点,我填写了WNDCLASSEX结构,我随后将其传递给RegisterClassEx()。这是在WinMain中完成的第一件事,它看起来像这样:

WNDCLASSEX windowConfig = {0};

windowConfig.cbSize = sizeof(WNDCLASSEX);
windowConfig.style = CS_HREDRAW | CS_VREDRAW;
windowConfig.lpfnWndProc = WndProc;
windowConfig.hInstance = hInstance;
windowConfig.hCursor = LoadCursor(NULL, IDC_ARROW);
windowConfig.lpszClassName = L"Title";

if (!RegisterClassEx(&windowConfig))
{
    MessageBox(NULL, "RegisterClassEx failed for no apparent reason", NULL, NULL);
    return FALSE;
}

如果此配置运行一次,是否?可能一个 - 鉴于参数没有改变 - 出于所有实际目的,只是假设注册课程总是成功并跳过检查?换句话说,只是

RegisterClassEx(&windowConfig);

..继续前进?

什么可能失败?

2 个答案:

答案 0 :(得分:3)

它消耗系统资源,所以理论上,在耗尽的系统中,它可能会失败(在这种情况下LoadCursor可能会先失败)

答案 1 :(得分:1)

如果已经注册了类,

RegisterClass(Ex)可能会失败。等等你的进程加载的一些dll使用类L“Title”所以你的窗口将不会被创建。始终(!)使用正确的错误检查。

更新:如果全局原子表泄露和/或已满,我忘记提及RegisterClass(Ex)可能会失败。