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