我一直在为Windows 10开发我们公司的证书提供程序。
现在,我遇到了一个问题。我通常不会在论坛,博客上提问,因为在大多数情况下,我都会找到解决方案,但是这次我一直在为一个问题苦苦挣扎一个月,而我却找到了问题的根源。
问题本身的简要说明:凭据提供程序使用了一个组合框,该组合框以前可以正常工作。现在,我重写了整个代码来管理一个大的更新,但是系统中出现了一个奇怪的错误。该错误仅在特定情况下发生。我正在用个人笔记本电脑开发和测试代码。
场景:
1)笔记本电脑已插入我的显示器/电源等。
2)我让它入睡。
3)我拔下所有电缆(包括电源)。
4)我从睡眠中唤醒。
然后,组合框不显示默认的选定项目,它为空。当我将其放下时,它会显示所有必要的项目。比credprov崩溃并重新启动,一切还好。
我知道,在类似的“奇怪”情况下,在大多数情况下,内存泄漏或相关问题会导致问题。当我检查事件查看器时,显示为c0000005,这是访问冲突。我开始调试违规的地方。后来我发现该程序以非常高的索引(超出范围可能是违规的原因)引用了组合框项目列表数组(在我的情况下实际上是矢量)。显然,实际索引存储在“ selectedComboItemIndex”变量(DWORD)中。
我很好奇它何时更改为这个奇数,而不是意外的行为。 SetComboBoxSelectedValue方法被随机调用一次(错误发生时),索引值异常高。我什至没有在代码中调用此方法,所以我不知道为什么调用它。即使我没有下拉组合框,电话也会发生。
我给了它一个可能是credprov本身的错误的机会。你怎么看?你以前见过这个问题吗?
提前谢谢!
答案 0 :(得分:0)
我通过停止使用“ SetSelected”和“ SetDeselected”方法解决了该问题。此外,我过滤了“ SetComboBoxSelectedValue”输入参数以仅接受有效数字。当index参数无效时,我记得将index参数替换为第一项(0)的相同方法。