vb6 - VB6 redim 错误“此数组已修复或暂时锁定”
问题描述
我有一个以 3 个对象值开头的全局数组变量 g ()。然后我调用一个 sub,它使用 g 中的一个项目作为输入,它需要在 g 中创建其他项目,并更新提供的项目。
类似的东西
宣言:
public g() 作为分支
初始化:
重新调整 g (1 到 3)
设置 g(1) = br1
设置 g(2) = br2
设置 g(3) = br3
sub的代码调用
调用 chg (g(2))
子
Public Sub chg (ByRef br As branch)
r = UBound(g)
ReDim g (1 To r + 2)
... (其余代码)
End Sub
Redim 语句上的代码错误,错误文本为“此数组已修复或暂时锁定”。
为什么我不能改变这个子数组的大小?有什么不一样的?
解决方案
从 MSDN 文档:
您尝试重新调整模块级动态数组的尺寸,其中一个元素已作为参数传递给过程。例如,在下面的代码中,ModArray 是一个动态的模块级数组,它的第 45 个元素通过引用传递给 Test 过程。
在这种情况下,不需要传递模块级数组的元素,因为它在模块中的所有过程中都是可见的。但是,如果传递了一个元素,则该数组将被锁定以防止为过程中的引用参数释放内存,从而在过程返回时导致不可预知的行为。
Dim ModArray() As Integer ' Create a module-level dynamic array.
Sub AliasError()
ReDim ModArray(1 To 73) As Integer
Test ModArray(45) ' Pass an element of the module-level array to the Test procedure.
End Sub
Sub Test(SomeInt As Integer)
ReDim ModArray (1 To 40) As Integer ' Error occurs here.
End Sub
一种想法是传递数组的索引而不是对象本身。
推荐阅读
- rpm - 从 RPM DB、BerkeleyDB 获取已安装的软件包
- azure-devops - 部署到 Visual Studio App Center 的二进制文件路径
- sublimetext3 - SublimeText 不打开多个文件
- php - 使用带有 php 页面的 Android 在 MySQL 中添加数据
- python - 在 Pandas 或 SQL 中保留包含非英语单词的行
- r - 如何将 ggplot2 for R 安装到自定义 lib 目录
- javascript - 如何设置 VSCode 调试器以在 Angular 6 中使用 Protractor E2E 测试
- python - 用字符串理解 NumPy dtype "c"
- javascript - 避免组件在重定向Angular 6上闪烁
- c# - 如何在 PrintDocument C# 上打印特定的 DataGridView 行