RegistryValueKind.DWord的一个bug
2009-07-16 16:01
267 查看
在设置注册表的值时,指定值类型为uint型,指定注册表数据类型为RegistryValueKind.DWord,当值大于某个数以后,设置报错,测试了一下,临界点是0x7FFFFFFF(2147483647)。
如果指定值为int,虽然是有符号的,但是,写入注册表以后,同样是无符号的双字节整型,0-0xFFFFFFFF都可以设置。
这就奇怪了,好端端的uint无符号整型写入出错,相同值的int有符号整型写入却不会出错。
深究了一下使用uint型写入时,临界点是0x7FFFFFFF,恰是int型的最大值,可能的情况就是,当指定注册表数据类型为RegistryValueKind.DWord时,指定值都是先转化成int型传入,到注册表再写成DWord。
大家大可以试试以下代码:
如果指定值为int,虽然是有符号的,但是,写入注册表以后,同样是无符号的双字节整型,0-0xFFFFFFFF都可以设置。
这就奇怪了,好端端的uint无符号整型写入出错,相同值的int有符号整型写入却不会出错。
深究了一下使用uint型写入时,临界点是0x7FFFFFFF,恰是int型的最大值,可能的情况就是,当指定注册表数据类型为RegistryValueKind.DWord时,指定值都是先转化成int型传入,到注册表再写成DWord。
大家大可以试试以下代码:
int xxx = (int)0x80000000;//编译都通不过 int xxx = (int)0x7FFFFFFF;//顺利过关
相关文章推荐
- C#操作注册表REG_DWORD类型键异常(RegistryValueKind.DWord异常)解决方案
- C#操作注册表REG_DWORD类型键异常(RegistryValueKind.DWord异常)解决方案
- SQLite3.c中的一个bug:error: expected value in expression #if SQLITE_HAS_CODEC
- Entity Framework 4.0 的一个bug :DefaultValue问题
- 发现一个CSDN的Bug,有图
- java nio的一个严重BUG(转)
- 一个让我怀疑信仰的BUG——关于临界区
- 原生js在IE7下 向dom添加节点的一个bug, (本例为添加hidden input)
- 使用百度编辑器的时候的一个小bug
- Vdsp(bf561)中的浮点运算(15):vdsp库的一个BUG
- Cocos2d-x 3.0 JNI BUG 修复。(Android 如何创建一个线程 延迟执行函数 创建一个随机数)
- 一个很郁闷的bug
- SWFaddress2.3在IE6或IE7下的一个bug
- 【bug:香菜】【同一个判断在出现在程序中的多处】
- Visual Studio 2010 STL的一个bug导致内存泄露
- 漫谈程序员系列:她发现了一个Bug……
- Tomcat 6、7在EL表达式解析时存在的一个Bug
- Windows Phone 7(WP7)开发 PhoneTextBox的一个BUG需要注意
- Oracle 11.2.0.1的一个Bug,客户端报ORA-03113: 通信通道的文件结尾