如何往WIN9X注册表写一个字符串,而这个字符串由CString变量确定。

解决方案 »

  1.   

    类型不匹配就转换一下。
    比如:
    LPSTR lp=Str.GetBuffer(0);
    写到默认的好象键名设为NULL
      

  2.   

    m_sEditAppProgramName是个CString类型的变量,而::RegSetValueEx的第五个参数是个LPVOID类型的变量,CString可以转变为LPCTSTR,却不可以直接转变为LPVOID,你应该作如下更改:
    lRet = ::RegSetValueEx( 
    hOpenKey,            
    "(默认)",                
    0,                
    REG_SZ,                
    (LPVOID)(LPCTSTR)m_sEditAppProgramName,        //出错行
    m_sEditAppProgramName.GetLength()+1
    ); 
        
      

  3.   

    很遗憾,还是不行。出错信息为:
    cannot convert parameter 5 from 'void *' to 'const unsigned char *'
    麻烦您再想想办法!
      

  4.   

    这个函数的参数就不能用CString.
    LPVOID 就是 void* 的意思.
    后边还有一个表示大小的参数.所以正确的应该是:char* tmp_cStr=new char[m_sEditAppProgramName.GetLength()+1];
    memset(tmp_cStr,0,m_sEditAppProgramName.GetLength()+1);
    memcpy(   tmp_cStr,
                    m_sEditAppProgramName.GetBuffer(0),
                    m_sEditAppProgramName.GetLength());
    //      将出错的参数改为:(void*)tmp_cStr;
    //      将后面的参数改为:(m_sEditAppProgramName.GetLength()+1)
    delete[] tmp_cStr;
      

  5.   

    自己转换,大致如下:
    CString str="sth";
    LPBYTE p=new BYTE[str.GetLength()+1];
    for(int i=0;i<str.GetLength();i++)
        p[i]=str[i];
    p[i]='\0';
    //do sth
    delete[]p;
      

  6.   

    (const unsigned char *)str.GetBuffer(0)就可以了,至于那么麻烦吗?
      

  7.   

    问题解决了,谢谢各位的帮忙。
    特别谢谢hnyyy(前进) !
     huqiming(Super) 说的用NULL写为默认值也是正确的。我送您20分,可能少了一点,很抱歉哦!
    谢谢各位!谢谢您们热心的帮助!