189 8069 5689

vbnet中的堆栈 vbnet函数与模块

vb堆栈空间溢出

递归可以用迭代来等价代替。

成都创新互联公司服务项目包括潼南网站建设、潼南网站制作、潼南网页制作以及潼南网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,潼南网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到潼南省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

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就不用这么麻烦了)

求大神修改 vb.net SetWaitableTimer(mlTimer, ft, 0, 0, 0, 0) 导致堆栈不对称 怎么修改?

Imports System.Runtime.InteropServices

Module APIs

StructLayout(LayoutKind.Sequential)

Public Structure FILETIME

Public dwLowDateTime As UInteger

Public dwHighDateTime As UInteger

Public ReadOnly Property Value() As ULong

Get

Return CType(dwHighDateTime  32, ULong) + dwLowDateTime

End Get

End Property

End Structure

Public Delegate Sub TimerCompleteDelegate()

DllImport("kernel32.dll")

Public Function CreateWaitableTimer(lpTimerAttributes As IntPtr, bManualReset As Boolean, lpTimerName As String) As IntPtr

End Function

DllImport("kernel32.dll")

Public Function SetWaitableTimer(hTimer As IntPtr, ByRef ft As Long, lPeriod As Int32, pfnCompletionRoutine As TimerCompleteDelegate, pArgToCompletionRoutine As IntPtr, fResume As Boolean) As Boolean

End Function

Public Function SetWaitableTimer(hTimer As IntPtr, ByRef ft As Long, lPeriod As Int32) As Boolean

Return SetWaitableTimer(hTimer, ft, lPeriod, Nothing, IntPtr.Zero, True)

End Function

End Module

SetWaitableTimer的声明错了

vb.net中创建类

不熟悉VB,如有不妥的地方请包涵!

Public Class Stack

Dim aryData() As Integer

Sub New(ByVal Num As Integer)

Dim aryData(Num) As Integer

End Sub

Function Pop() As Integer

If (aryData.Length = 0) Then

Return 0

Else

Dim a As Integer

a = aryData(aryData.Length)

aryData(aryData.Length) = Convert.ToInt32(DBNull.Value)

Return a

End If

End Function

Sub Push(ByVal n As Integer)

For Each i As Integer In aryData

If (aryData(i) = Convert.ToInt32(DBNull.Value)) Then

aryData(i) = n

End

Else

Continue For

End If

Next

End Sub

Sub PrintStack()

For Each i As Integer In aryData

If (aryData(i) = Convert.ToInt32(DBNull.Value)) Then

End

Else

Print(aryData(i))

End If

Next

End Sub

End Class

VB.net的默认堆栈有多大?如何修改默认堆栈大小

默认堆栈大小1 MB

具体的我也不了解,在MSDN上找了到了点东西看看对你有没帮助:

建立新线程指定并线程的最大堆栈大小:

用EDITBIN的/STACK选项:

不行还是在C++那里想办法吧,比如减少堆栈的使用,少用递归之类的。

水平不够就说这些了。

VB.NET中,PInvoke 函数 GetWindowThreadProcessId 调用导致堆栈不对称

题主用的是 VB6 时代的 Windows API,那里面的 Long 类型相当于 .NET 里的 Int32,声明 API 时要把所有 Long 类型替换成 Int32 才可以正常使用,否则堆栈溢出。

另外操作内存这种函数需要管理员权限来运行,否则程序会报错甚至崩溃。

在vb模块中怎么定义动态数组?

1、声明数组的语句:

Dim types(  )  As integer

2、然后使用ReDim语句来配置数组大小。

ReDim Types(X+1)

3、假设想改变数组大小又不想丢失原来的数据,仅仅要在ReDim语句中包括Preservekeyword就能够,典型语句为:

ReDa_m PresetVe Types(10,23) 

对于多维数组,在使用Preservekeyword时,仅仅能改动最后一维的大小。假设改变其它维,那么将出现执行错误。假设不清楚某维的当前大小,能够使用GetI~ength函数来获取。

扩展资料:

数组的使用:

用For Each来循环遍历一个数组。比如:

Dim x As Integer

F0r Each x In arrayl

Console.WriteLine(x)

Next 

在使用数组时还要注意,不仅声明语法有变化,并且在执行时处理方式也有了非常大的变化。VB.NET在堆栈中给数组分配地址空间,当向一个方法传递数组类型的参数时,使用的是引用传递而不是值传递。以下是互相传递数组引用的三个方法:

Dim arrayl(3,3)AS Integer

Dim array2 As Integer(,)

Redim array2(3,3)

Dim array3 As Integer(,)={{2,4},{12,29}}


本文标题:vbnet中的堆栈 vbnet函数与模块
当前URL:http://cdxtjz.com/article/hjjsic.html

其他资讯