我要读取word的安装路径
代码如下:long lRet = 0;
CString strRegOffice = _T("Software\\Microsoft\\Office\\11.0\\Word\\InstallRoot");
HKEY   hResult;
lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,strRegOffice,0,KEY_QUERY_VALUE,&hResult);
if(lRet == ERROR_SUCCESS)
{

DWORD      WordType =  REG_SZ;
DWORD      WordData =  100;
LPBYTE     KeyByte  =  new  BYTE[1024]; lRet = ::RegQueryValueEx(hResult,(_T("Path")),NULL,&WordType,(LPBYTE)&KeyByte, &WordData);
        if(lRet == ERROR_SUCCESS)
{

AfxMessageBox(CString((char *)KeyByte) );
}

RegCloseKey(hResult); 
}
else
{
AfxMessageBox("test falied!");
}1 为什么程序调试状态下跟进去KeyByte里面有内容,我AfxMessage()是空的?,我如何判断我是否读正确注册表中的内容?
2 如果我把DWORD      WordData =  100; 这个值初值设置的小与30 ,既 DWORD      WordData =  sizeof(DWORD);
  为什么RegQueryValueEx返回值是错误的,直接跳到AfxMessageBox("test falied!");
3 我该如何把KeyByte转变成CString 类?

解决方案 »

  1.   

    CString strRegOffice = _T("Software\\Microsoft\\Office\\11.0\\Word\\InstallRoot");
    你这个路径对吗?你RegOpenKeyEx调用失败,GetLastError看看函数的返回值是什么不就很清楚了
      

  2.   

    lRet = ::RegQueryValueEx(hResult,(_T("Path")),NULL,&WordType,KeyByte, &WordData);
      

  3.   

    你的输出buffer长度不够放的,所以出错
      

  4.   

    直接跳到AfxMessageBox("test falied!")说明你的
    lRet = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,strRegOffice,0,KEY_QUERY_VALUE,&hResult);
    执行失败,用GetLastError看看错误代码是多少KeyByte转变成CString :直接强制转化一下CString str = (LPTSTR)KeyByte;
      

  5.   


    这个参数我参看了下资料说有两个目的,之所以要给地址,是因为在程序执行RegQueryValueEx这个函数的时候要根据实际情况修改这个值的内容?我实际跟进去的时候这个值也是变化的,当执行完后这个值变成了30?
      

  6.   


    KeyByte参数你原本声明的就是一个指针LPBYTE,根本就不用加,虽然编译的时候不会出错,但是单步调试的就有问题,出现异常!!!你的那种转换是正确的
    也可以CString str = (LPTSTR)KeyByte