2017-06-15 117 views
0

在什么情况下Win32调用GetMenuItemCount可以返回-1,除了提供一个无效的句柄菜单?GetMenuItemCount返回-1

+5

该问题不能回答。你已经确定了最常见的原因。如果返回-1,则调用'GetLastError'来找出错误。如果此API调用失败,则您完全有权终止该进程。 –

+1

奇怪的是'HMENU'参数被标记为可选的。如何通过'NULL'菜单处理该函数的有效调用? –

+0

@CodyGray:我猜'_In_opt_'注释在合同的实现方面开始了它的生命。它被放在那里,以便编译器在实现不测试'NULL'的情况下投诉。然后将它复制到界面上,它在语义上没有意义。这是猜测,但。也许还有更多。 – IInspectable

回答

3

您可以假设的是GetMenuItemCount在失败时返回-1。

此API调用失败的具体原因未记录 - 即,它们不是已发布合同的一部分。它们是可以随时间变化的实现细节,所以你的代码不能依赖它们。

如果您需要在发生故障时获得更多信息,请根据文档建议致电GetLastError

+0

我想加入David的说法,假设你通过了一个有效的句柄,“如果这个API调用失败,你完全有权终止这个过程”,但是我不想把言辞放在嘴边。你所说的一切对于合同都是完全正确的,但实际上,这个API不会失败,并且你不需要浪费时间编写一堆复杂的错误处理代码。 –