.NET中的数据类型的一些变化

今天在做一个关于 IC 卡读写的程序,用到了一个 IC 卡读写器,有一个配套的 dll 动态库和一些库函数的说明,但是调试的时候总是会遇到一些奇怪的现象。 VB6 的示例中可以的操作,在我的程序中就会出现“未将对象引用设置到对象的实例”等等错误。折腾了半天也没有什么进展。后来用 .NET 的升级向导将那个 VB6 的实力程序升级,发现模块中函数的声明有一些变化。

** VB6 ** ** 中声明:

**

Declare Function srd_45d041 Lib "mwic_32.dll" ( ByVal icdev As Long , ByVal page As Integer , ByVal offset As Integer , ByVal le As Long , ByVal data_buffer$) As Integer

** 升级后 .NET ** ** 的声明:

**

Declare Function srd_45d041 Lib "mwic_32.dll" ( ByVal icdev As Integer , ByVal page As Short , ByVal offset As Short , ByVal le As Integer , ByVal data_buffer As String ) As Short

VB6 中 Long 类型在 .NET 中变成了 Integer ,而 Integer 变成了 Short 。就这么一点小小的问题搞得我郁闷了半天。把程序调试通过以后,我查了一下 MSDN Library ,发现 .NET 的数据类型和 VB6 的存在一些变化。具体的可以看下面这两张表。

表 1 VB6 中的数据类型

** 数据类型

**

|

** 存储空间大小 **

|

** 范围 **

---|---|---

** Byte

**

|

1 个字节

|

0 到 255 **

**

** Boolean **

|

2 个字节

|

** True ** 或 ** False **

** Integer **

|

2 个字节

|

-32,768 到 32,767

** Long ** _
_ ( 长整型 )

|

4 个字节

|

-2,147,483,648 到 2,147,483,647

** Single **
( 单精度浮点型 )

|

4 个字节

|

负数时从 -3.402823E38 到 -1.401298E-45 ;正数时从 1.401298E-45 到 3.402823E38

** Double **
( 双精度浮点型 )

|

8 个字节

|

负数时从 -1.79769313486232E308 到
-4.94065645841247E-324 ;正数时从 4.94065645841247E-324 到 1.79769313486232E308

** Currency **
( 变比整型 )

|

8 个字节

|

从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807

** Decimal **

|

14 个字节

|

没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335 ,而小数点右边有 28 位数时为 +/-7.9228162514264337593543950335 ;最小的非零值为 +/-0.0000000000000000000000000001

** Date **

|

8 个字节

|

100 年 1 月 1 日 到 9999 年 12 月 31 日

** Object **

|

4 个字节

|

任何 ** Object ** 引用

** String **
( 变长 )

|

10 字节加字符串长度

|

0 到大约 20 亿

** String **
( 定长 )

|

字符串长度

|

1 到大约 65,400

** Variant **
( 数字 )

|

16 个字节

|

任何数字值,最大可达 ** Double ** 的范围

** Variant **
( 字符 )

|

22 个字节加字符串长度

|

与变长 ** String ** 有相同的范围

用户自定义
(利用 ** Type ** )

|

所有元素所需数目

|

每个元素的范围与它本身的数据类型的范围相同。

表 2 VB.NET 中的数据类型

** Visual Basic ** ** 类型

**

|

** 公共语言运行库类型结构

**

|

** 名义存储分配

**

|

** 取值范围

**

---|---|---|---

** Boolean **

|

** System.Boolean **

|

2 个字节

|

** True ** 或 ** False **

** Byte **

|

** System.Byte **

|

1 个字节

|

0 到 255 (无符号)。

** Char **

|

** System.Char **

|

2 个字节

|

0 到 65535 (无符号)。

** Date **

|

** System.DateTime **

|

8 个字节

|

0001 年 1 月 1 日凌晨 0:00:00 到 9999 年 12 月 31 日晚上 11:59:59 。

<td style="BORDER-RIGHT: gray 1pt solid; PADDING-R

Published At
Categories with Web编程
Tagged with
comments powered by Disqus