return 或在 winapi window 过程中做什么以拦截错误并生成错误日志条目

what to return or to do in a winapi window procedure in order to intercept an error and produce an error log entry

我们有一个c程序。
开发该程序的一项政策是:

"Every function/method that can fail should have a return value and should
return the appropriate value in case of an error. No exception like behaviour."

因此,在出现错误的情况下,我们的程序会生成级联错误报告,因为每个函数 return 都有一个错误标志。

我的问题是 Window 过程。

在 c WinAPI 中,我在单独的函数中处理按钮单击事件 (WM_COMMAND signal)。如果有错误,我会创建一个错误日志条目和 return 0。

在我调用函数的 window 过程中,如果函数 returns 0,我会生成一个错误日志条目,现在,我应该 return 到 window 过程以实现它,这个错误日志链和错误 return 值不会中断?

我从 Whosebug 了解到 post: How do you indicate errors in handling messages in window procedures?

那个windows不关心我的错误。

我也知道WM_CREATE这个信号跟其他信号不一样

但我只想发送一个适当的 return 值。这是0吗?

MSDN 没有帮助我: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633573(v=vs.85).aspx

"The return value is the result of the message processing and depends on the message sent."

非常感谢

您只能将策略应用于其原型在您控制之下的函数。 window 程序不受您的控制。 return 值的含义不是由您决定的。 Windows API 确定了这一点,并且以与您的政策不兼容的方式进行。

您只需要接受您的政策不能在这里应用。对于 WM_COMMAND window 过程,您不能级联错误,因为调用方 Win32 框架不遵循您的策略。您可以做的最好的事情是记录错误,然后 return 从 window 过程中获取文档规定的值。在这种情况下,它是零,因为您处理了消息。

window proc 的 return 值仅对 window 管理器有意义。因此,如果您已处理消息,则应始终 return 0。否则,您应该调用 DefWindowProc 并 return 它的值。

然而,这与通过 CreateDialog 或 DialogBox 等函数创建的对话框完全相反:在这种情况下,您应该 return 如果您已处理消息,则应为 TRUE,否则为 FALSE,否则调用 DefWindowProc.