积极答复者
RegOpenKeyEx在Windows Server 2008获取注册表信息异常

问题
-
如下代码以VC6编译,在XP和2003中运行正常
1. CString dataStr("");
2. DWORD dataSize=512;
3. error=::RegQueryValueEx(hItem,lpValueName,NULL,NULL,(LPBYTE)(LPCSTR)dataStr,&dataSize);
4. AfxMessageBox("Path: "+dataStr);
在Windows Server2008使用Visual Studio 2005 SP1编译仍然成功,运行时却产生异常。执行完行3后,debug显示dataStr获取了正确的值,但是在行4显示时抛出Access violation writing location
对上述代码做如下更改,使用char 数组返回结果,无论是debug还是运行都执行正确。
1. unsigned char chbuf[512];
2. CString path;
3. error=::RegQueryValueEx(hItem,lpValueName,NULL,NULL,chbuf,&dataSize);
4. path.Format("%s", chbuf);
5. AfxMessageBox("Path: "+path);
我的问题是,从vista开始,到底是下面的哪一项的更改导致了上述老代码运行在新系统中抛出异常
(1)LPCSTR/CSting;
(2)RegQueryValueEx API
(3)VC6/Visual Studio 2005 SP1
谢谢!
- 已编辑 Eazhang 2010年12月14日 3:49 编辑界面