这篇MSDN 文章应该演示如何删除具有子项的注册表项,但代码存在缺陷。
说的那一行
StringCchCopy (lpEnd, MAX_PATH*2, szName);
导致异常,这是由于试图复制到 lpEnd 的缓冲区之外。我尝试通过用以下内容替换该行来纠正解决方案
size_t subKeyLen = lstrlen(lpSubKey);
size_t bufLen = subKeyLen + lstrlen(szName)+1;
LPTSTR buf = new WCHAR[bufLen];
StringCchCopy(buf,bufLen,lpSubKey);
StringCchCopy(buf+subKeyLen,lstrlen(szName)+1,szName);
buf[bufLen-1]='\0';
由于目标平台和开发平台不同,我无法单步执行代码,但是从我在代码中输入的日志来看,它看起来只是冻结了,但没有引发异常。
令人沮丧的是 MSDN 文章是错误的……你会认为它们会被检查。
关于如何纠正这个问题的任何想法?
谢谢。