您的错误在MSDN中的here上进行了描述。
注意:此MSDN文章与Visual Studio 2005有关。但可能会说VB6的限制相同。
- 检查程序是否嵌套得太深。
- 确保递归程序正确终止。
- 如果局部变量需要的空间比可用空间多,请尝试在模块级别声明一些变量。您还可以通过在Property,Sub或Function关键字前加上Static来声明过程中的所有变量。或者,您可以使用Static语句在过程中声明各个静态变量。
- 将一些固定长度的字符串重新定义为可变长度字符串,因为固定长度字符串比可变长度字符串使用更多的堆栈空间。您还可以在模块级别定义不需要堆栈空间的字符串。
- 检查嵌套DoEvents函数调用的数量,方法是使用“调用”对话框查看堆栈中哪些过程处于活动状态。
- 通过触发已经在堆栈上调用事件过程的事件,确保没有导致“事件级联”。事件级联类似于未终止的递归过程调用,但它不太明显,因为调用是由Visual Basic进行的,而不是代码中的显式调用。使用“调用”对话框可以查看堆栈中处于活动状态的过程。
<强> [更新] 强>
您可以在here上找到Visual Studio 6(VB6)文章。
- 您有太多活动的Function,Sub或Property过程调用。
检查程序是否嵌套得太深。对于递归过程,即调用自身的过程尤其如此。确保递归过程正确终止。使用“调用”对话框可以查看哪些过程处于活动状态(在堆栈上)。
- 您的局部变量需要比可用空间更多的局部变量空间。
尝试在模块级别声明一些变量。您还可以通过在Property,Sub或Function关键字前加上Static来声明过程中的所有变量。或者,您可以使用Static语句在过程中声明各个静态变量。
- 你有太多固定长度的字符串。
过程中的固定长度字符串可以更快地访问,但比可变长度字符串使用更多的堆栈空间,因为字符串数据本身放在堆栈上。尝试将一些固定长度的字符串重新定义为可变长度字符串。在过程中声明可变长度字符串时,只将字符串描述符(而不是数据本身)放在堆栈上。您还可以在模块级别定义不需要堆栈空间的字符串。默认情况下,在模块级别声明的变量为Public,因此该模块中的所有过程都可以看到该字符串。
- 您有太多嵌套的DoEvents函数调用。
使用“调用”对话框可以查看堆栈中处于活动状态的过程。
- 您的代码触发了事件级联。
事件级联是由触发调用已在堆栈上的事件过程的事件引起的。事件级联类似于未终止的递归过程调用,但它不那么明显,因为调用是由Visual Basic而不是代码中的显式调用完成的。使用“调用”对话框可以查看哪些过程处于活动状态(在堆栈上)。
我有一个案例而不是:
Public Property Let EmployeeNo(ByVal vdata As String)
mvarEmployeeNo = vdata
End Property
我错了:
Public Property Let EmployeeNo(ByVal vdata As String)
EmployeeNo = vdata
End Property
我知道这是一个老问题,但我偶然发现在这里试图弄清楚我的情况,并发现它是一些遗留的debug.print语句,我引起了这个。它们是在我在表单中的GridText事件的循环中生成的,我猜测它会占用所有堆栈空间。