重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
n=n+1
创新互联公司服务项目包括临朐网站建设、临朐网站制作、临朐网页制作以及临朐网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,临朐网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到临朐省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
之后你重新redim policetask(1,n-1) 此时的n-1就是0,相当于你的第二维中本身就没有任何元素(vb.net中的数组定义是不含上标的,跟vb不一样),之后你再对plicetask(0,n-1)操作就会报错。
另外,大致看了一下,程序大概是找重复次数的,不过vb.net中不是有Dictionary这种东西么,为什么还要用数组去自己查找。
我用VB6运行不报错
但在Excel的VBA中运行则报错
值得说明的是,我的VB6是打了SP5补丁的
尽管你可能不愿意听,但这确实是VB语言的一个Bug,只要字符串中含有如下日文字符(并不是全部日文字符),在进行文本比较时就会出错(二进制比较则不会出错):
ゴガギグゲザジズヅデドポベプビパヴボペブピバヂダゾゼ
这个Bug已经被微软通过补丁更正。
可以用变通的方法实现不区分大小写的字符串查询:
MsgBox InStr(1, LCase("12K新 ペンダント縦约"), LCase("12k"))
也就是说把原始字符串和要查找的字符串都转为小写(或者都转为大写)再来查找即可。
溢出就是说你设置的变量不合适,数据大于你设置的变量范围了.
比如你设置的是int,,,,而数据超过了256,就会
溢出
题主这个FunctionFindWindow(一堆参数)AsLong,返回值是个Long,而下面wd=FindWindow(),wd却是个Integer类型的,当然会溢出。楼上说都改成Long确实可以,不过题主的API声明是从VB里拷贝过来的吧?VB里的Long到.NET中就是Int32了,所以应该把上面FindWindow的返回类型由Long改为Int32(或者Integer)才是正解。
第一问题好理解, 可能 key 是integer类型缘故吧,把它改为Byte。
第二个没读懂,你换个方式试试,如:
'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)\人机对战五子棋-绿色免安装单机版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()
文件读到最后一块总会小于指定长度的,你的代码先定义数组长度,然后再读取,这样最后读取的一块二进制数组必然有一部分无效的。
递归可以用迭代来等价代替。
Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Const QueueVolume = 1000000
Private QueueX(QueueVolume) As Long
Private QueueY(QueueVolume) As Long
Private SrcColor As Long, DestColor As Long
Private QStart As Long, QEnd As Long
Private Function EnQueue(ByVal X As Long, ByVal Y As Long) As Boolean
If (QEnd + 1) Mod QueueVolume QStart Then
QueueX(QEnd) = X
QueueY(QEnd) = Y
QEnd = QEnd + 1
EnQueue = True
Else
EnQueue = False
End If
End Function
Private Function DeQueue(ByRef X As Long, ByRef Y As Long) As Boolean
If QStart QEnd Then
X = QueueX(QStart)
Y = QueueY(QStart)
QStart = QStart + 1
DeQueue = True
Else
DeQueue = False
End If
End Function
Private Sub Qytc()
Dim X As Long, Y As Long
Dim cr As Long
Do While DeQueue(X, Y)
cr = GetPixel(Picture1.hdc, X, Y)
If cr = SrcColor Then
Picture1.PSet (X, Y), DestColor
EnQueue X, Y - 1
EnQueue X, Y + 1
EnQueue X - 1, Y
EnQueue X + 1, Y
End If
DoEvents
Loop
End Sub
Private Sub Command1_Click()
EnQueue 5, 6
Qytc
End Sub
Private Sub Form_Load()
QStart = 0 '队列左端
QEnd = 0 '队列右端
SrcColor = RGB(255, 0, 0)
DestColor = RGB(0, 0, 255)
End Sub
说明:放一个PictureBox1,ScaleMode设为3-pixel,BackColor改成红色。
放一个按扭Command1。
如果队列长度不够,把Private Const QueueVolume = 1000000 再改大点。
只适用于VB6。
(用VB.net就不用这么麻烦了)