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 日 到 
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 個字節
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。
object
system.object(類)
4 個字節
任何類型都可以存儲在 object 類型的變量中。
single 
(單精度浮點型) 
system.single
4 個字節
負值取值范圍為 -3.4028235e+38 到 -1.401298e-45;正值取值范圍為 1.401298e-45 到 3.4028235e+38。
string 
(變長) 
system.string(類)
取決于實現平臺
0 到大約 20 億個 unicode 字符。
用戶定義的類型 
(結構) 
(從system.valuetype繼承)
取決于實現平臺
結構中的每個成員都有由自身數據類型決定的取值范圍,并與其他成員的取值范圍無關。
從兩張表中可以清楚地看到vb6中的integer類型是2個字節長度的,long是4個字節長度的。在.net中interger變成了4個字節,long是8個字節。多了一個short類型,是2個字節的。數據類型的字長不一樣導致了調用庫函數時數據類型轉化的沖突,所以也就出現了很多奇怪的問題,不過現在問題順利解決,希望這些經驗能對.net的初學者有一些幫助。
新聞熱點
疑難解答
圖片精選