2017-06-15 79 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不會失敗,並且你不需要浪費時間編寫一堆複雜的錯誤處理代碼。 –