Windows 7 VS 2012,C ++
我正在调试一个庞大的程序(因此无法跟踪所有可能的路径)。在战略位置放置一些断言后,我得到MFC DeleteItem()失败(返回0)但没有错误(GetLastError()== 0)。
这不是我正在调试的问题,但我希望从这个错误中获取线索,了解下一步的位置。没有任何错误,网络上没有任何内容(包括MSDN)唯一的线索(可能是错误的)是它传递了错误的HTREEITEM值,但为什么没有错误?
答案 0 :(得分:2)
GetLastError()的返回值仅在文档告诉您它时才有意义,通常在"返回值"部分。
在这种情况下,它不适用。 CTreeCtrl::DeleteItem
method如果失败则返回FALSE
(0),如果成功则返回非零。它只是返回TVM_DELETEITEM
message的结果,框架将代表您发送到TreeView控件。
您需要调试 删除项目失败的原因。就像你在问题中提到的那样,最可能的解释是指定的HTREEITEM
句柄无效。调试这不应该是困难的。在调用DeleteItem
时在代码中设置断点,然后运行程序并模拟错误。当执行到达DeleteItem
的调用时,调试器将会中断并且您可以调查您要传入的HTREEITEM
的值。您还可以将值更改为已知的值是有效的,比如NULL
(删除TreeView中的所有项目),只是为了确保您正确地确定了罪魁祸首。