DWORD dwType, dwCount;
TCHAR value[50]= {0};
long dwcount = 50;
LONG lResult = RegQueryValueEx(hSecKey, (LPCTSTR)szEntry.GetString(), NULL, &dwType,(LPBYTE)value, &dwCount);
if (lResult == ERROR_SUCCESS)
{
    //
}
hSecKey为要查询的键,szEntry为具体的某项值,各位大哥,value的值是取到了,这函数执行也没错,当时当整个函数体退出的时候抱Debug Error,具体信息如下:
DAMAGE:after Normal block(#25497) at oxo1BB68F8
另外,为什么用RegQueryValue函数如下用不能取到值?
// LONG lResult = RegQueryValue(hSecKey,(LPCTSTR)  szEntry.GetString(),(LPTSTR)value,&dwcount);
RegCloseKey(hSecKey);
if (lResult == ERROR_SUCCESS)
{
                //
         }

解决方案 »

  1.   

    (LPCTSTR)szEntry.GetString()改称一个具体的字符串试一试!
      

  2.   

    dwcount 给个大于0的初始值试试?
      

  3.   

    还是不行,我将dwCount改成了50,将(LPCTSTR)szEntry.GetString()改成了“pan”也不行,各位大哥不清楚为什么报这样的错误啊:
    DAMAGE:after Normal block(#25497) at oxo1BB68F8
    好象是个断言失败,可以忽略过去,但是在对话框中不能忽略过去。
      

  4.   

    不好意思刚才帖错了。
    如果是取注册表值的话,下面的程序足够了。
    要先用RegOpenKeyEx打开查找的注册表键 HKEY  hKey;
    DWORD dwType, dwSize = MAX_PATH;
    char szPath[MAX_PATH];
    LONG lResult = RegOpenKeyEx( HKEY_CURRENT_USER,
    "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\You saved Path",
    0, KEY_READ, &hKey );
    if( ERROR_SUCCESS != lResult )
    return ""; lResult = RegQueryValueEx( hKey, "My Path", NULL,
    &dwType, (BYTE*)szPath, &dwSize );
    RegCloseKey( hKey );

    if( ERROR_SUCCESS != lResult )
    return ""; CString strGetVal = _T(szPath);
    return strGetVal;
      

  5.   

    兄弟们,事情已搞定,问题是出在参数的的设置上,好象这些函数的参数要求非常严格,比如这个RegQueryValueEx的第五个参数为LPBYTE必须要是这样,在函数里进行强制转换是不行的,虽然可以编译通过,但是好象运行期会报内存错误,一定要在外面定义一个LPBYTE lpb = new BYTE[大小];然后逐字复制过来。
    感谢大家!揭贴!