注册表函数RegEnumValue()的返回值中,有一个返回值是得到指定键的值。它是BYTE(unsigned char)型的,  将其强制转换为char、CSstring 类型后,好象不行,因为用 MessageBox( )后,显示 (null)是不是BYTE,不能完全转换为 char型,有数据丢失???

解决方案 »

  1.   

    不是不能转化为char,而是有的不能当字符串用。比如byte 0,转成字符串就是字符串的结束了。
      

  2.   

    哦,是我搞错了。   之所以像我说的显示null,是因为RegenumValue根本就没有成功,所以才null。但再请问:  为什么用RegenumValue枚举键值时,有的简直可以返回,有的不行??比如:    SystemTray      “SysTray.Exe”
             internat.exe    “internat.exe”利用regenumvalue() 枚举时,可以返回“SysTray.Exe”但不能返回“internat.exe”(而是null)请问
      

  3.   

    RegenumValue存在一个非常容易犯的错误,就是缓冲区的长度问题,你每次Enum之后,那个缓冲区长度就变了,传给下一次Enum的时候缓冲区长度就是上一次Enum的结果。比如你的缓冲区长度开始为260,然后有两个:
    “SysTray.Exe”
    “internat.exe”第一次Enum返回后,缓冲区长度就变为“SysTray.Exe”的长度11了,所以你第二次Enum取“internat.exe”的时候最多就能取到“internat.ex”,因为缓冲区长度不够。
    所以应该每次Enum都重新设置缓冲区长度。
      

  4.   

    idAnts(你才无聊呢) 谢谢你了,你说的很对!