因?yàn)槟?jì)算的數(shù)值太大,超過了整數(shù)的最上限。
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)東河免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
而如果您用LONG數(shù)據(jù)類型或ULONG數(shù)據(jù)類型,也不會(huì)計(jì)算超過8次的結(jié)果。
溢出就是說你設(shè)置的變量不合適,數(shù)據(jù)大于你設(shè)置的變量范圍了.
比如你設(shè)置的是int,,,,而數(shù)據(jù)超過了256,就會(huì)
溢出
n=n+1
之后你重新redim policetask(1,n-1) 此時(shí)的n-1就是0,相當(dāng)于你的第二維中本身就沒有任何元素(vb.net中的數(shù)組定義是不含上標(biāo)的,跟vb不一樣),之后你再對plicetask(0,n-1)操作就會(huì)報(bào)錯(cuò)。
另外,大致看了一下,程序大概是找重復(fù)次數(shù)的,不過vb.net中不是有Dictionary這種東西么,為什么還要用數(shù)組去自己查找。
題主這個(gè) Function FindWindow(一堆參數(shù)) As Long,返回值是個(gè) Long ,而下面 wd = FindWindow(),wd 卻是個(gè) Integer 類型的,當(dāng)然會(huì)溢出。
樓上說都改成 Long 確實(shí)可以,不過題主的 API 聲明是從 VB 里拷貝過來的吧?VB 里的 Long 到 .NET 中就是 Int32 了,所以應(yīng)該把上面 FindWindow 的返回類型由 Long 改為 Int32(或者 Integer)才是正解。
第一問題好理解,?可能 key 是integer類型緣故吧,把它改為Byte。
第二個(gè)沒讀懂,你換個(gè)方式試試,如:
'Dim?bts()?As?Byte?=?My.Computer.FileSystem.ReadAllBytes("")
Dim?bst?As?System.IO.BinaryReader?=?New?System.IO.BinaryReader(System.IO.File.OpenRead("D:\Program?Files(Green)\人機(jī)對戰(zhàn)五子棋-綠色免安裝單機(jī)版v1.0.exe"))
Dim?bs()?As?Byte
Const?aLength?As?Integer?=?50000
Do
bs?=?bst.ReadBytes(aLength)
Console.WriteLine(bs.Length)
Loop?Until?bs.Length??aLength
bst.Close()
文件讀到最后一塊總會(huì)小于指定長度的,你的代碼先定義數(shù)組長度,然后再讀取,這樣最后讀取的一塊二進(jìn)制數(shù)組必然有一部分無效的。
題主這個(gè)FunctionFindWindow(一堆參數(shù))AsLong,返回值是個(gè)Long,而下面wd=FindWindow(),wd卻是個(gè)Integer類型的,當(dāng)然會(huì)溢出。樓上說都改成Long確實(shí)可以,不過題主的API聲明是從VB里拷貝過來的吧?VB里的Long到.NET中就是Int32了,所以應(yīng)該把上面FindWindow的返回類型由Long改為Int32(或者Integer)才是正解。