日期:2013-08-22  浏览次数:20461 次

今天在做一个关于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。

Decimal

System.Decimal

16 个字节

0 到 +/-79,228,162,514,264,337,593,543,950,335 之间不带小数点的数;
0 到 +/-7.9228162514264337593543950335 之间带 28 位小数的数;最小非零数为
+/-0.0000000000000000000000000001 (+/-1E-28)。

Double
(双精度浮点型)

System.Double

8 个字节

负值取值范围为 -1.79769313486231570E+308 到 -4.94065645841246544E-324;正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

Integer

System.Int32

4 个字节

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

Long
(长整型)

System.Int64

8 个字节

-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

Short

System.Int16

2 个字节

-32,768 到 32,767。