在 Visual Basic 6 中获得大约 64k 的限制
Get around 64k limit in Visual Basic 6
我需要更新 VB 中的旧代码,但 运行 遇到了问题。我已将字段添加到此结构中,现在当我尝试编译时出现此错误:
从网上看大多数人建议分解结构。问题是我正在从固件接收这种格式的数据。所以我想保持原样,但想办法解决这个问题。
我的结构是这样的:
Public Type DATA_V2_T
1_offsets(6399) As Single
2_offsets(6399) As Single
init_d_offsets(1199) As Single
init_a_offsets(1199) As Single
e_offsets(999) As Single
d_offsets(749) As Single
a_offsets(1199) As Single
final_e_offsets(6399) As Single
End Type
我现在添加的字段是 1_offsets 和 2_offsets 导致错误发生。这段代码似乎在某种程度上解决了这个问题,因为以下定义为全局:
Global data_v2 AS DATA_V2_T
我也可以对结构做这样的事情吗?
编辑:我尝试制作 class。我能够像这样定义我的变量:
Private 1_offsets(6399) As Single
Private 2_offsets(6399) As Single
Private init_d_offsets(1199) As Single
Private init_a_offsets(1199) As Single
Private e_offsets(999) As Single
Private d_offsets(749) As Single
Private a_offsets(1199) As Single
Private final_e_offsets(6399) As Single
我创建了 属性 get 方法来访问这些私有变量,如下所示:
Property Get p1_offsets() As Single()
p1_offsets = 1_offsets
End Property
编译器似乎没有对此进行抱怨。但我还需要能够设置数组的值,而我 运行 在设置 属性 时遇到了麻烦。我该怎么做?
我还没有测试过它是否有效,但我已经 class 像这样:
Public 1_offsets As Variant
Private Sub Class_Initialize()
ReDim 1_offsets(0 To 6399)
End Sub
所有内容都已编译
从这里得到:Creating VB array that is public, within class module
最简单的方法是将数据定义为 Variant
。这是一个例子:
Option Explicit
Private Sub Command1_Click()
Dim one_offsets(6399) As Single
one_offsets(0) = 33
one_offsets(1) = 44
Dim d As Data
Set d = New Data
d.one_offsets = one_offsets
End Sub
然后在您的数据中 class:
Option Explicit
Private m_1_offsets As Variant
Private m_2_offsets As Variant
Private m_init_d_offsets As Variant
Private m_init_a_offsets As Variant
Private m_e_offsets As Variant
Private m_d_offsets As Variant
Private m_a_offsets As Variant
Private m_final_e_offsets As Variant
Public Property Get one_offsets() As Variant
one_offsets = m_1_offsets
End Property
Public Property Let one_offsets(ByVal Value As Variant)
m_1_offsets = Value
End Property
如果您随后在 Watch window 中检查 m_1_offsets
,您会看到它被定义为 Variant/Single(0 to 6399)
。
我需要更新 VB 中的旧代码,但 运行 遇到了问题。我已将字段添加到此结构中,现在当我尝试编译时出现此错误:
从网上看大多数人建议分解结构。问题是我正在从固件接收这种格式的数据。所以我想保持原样,但想办法解决这个问题。
我的结构是这样的:
Public Type DATA_V2_T
1_offsets(6399) As Single
2_offsets(6399) As Single
init_d_offsets(1199) As Single
init_a_offsets(1199) As Single
e_offsets(999) As Single
d_offsets(749) As Single
a_offsets(1199) As Single
final_e_offsets(6399) As Single
End Type
我现在添加的字段是 1_offsets 和 2_offsets 导致错误发生。这段代码似乎在某种程度上解决了这个问题,因为以下定义为全局:
Global data_v2 AS DATA_V2_T
我也可以对结构做这样的事情吗?
编辑:我尝试制作 class。我能够像这样定义我的变量:
Private 1_offsets(6399) As Single
Private 2_offsets(6399) As Single
Private init_d_offsets(1199) As Single
Private init_a_offsets(1199) As Single
Private e_offsets(999) As Single
Private d_offsets(749) As Single
Private a_offsets(1199) As Single
Private final_e_offsets(6399) As Single
我创建了 属性 get 方法来访问这些私有变量,如下所示:
Property Get p1_offsets() As Single()
p1_offsets = 1_offsets
End Property
编译器似乎没有对此进行抱怨。但我还需要能够设置数组的值,而我 运行 在设置 属性 时遇到了麻烦。我该怎么做?
我还没有测试过它是否有效,但我已经 class 像这样:
Public 1_offsets As Variant
Private Sub Class_Initialize()
ReDim 1_offsets(0 To 6399)
End Sub
所有内容都已编译
从这里得到:Creating VB array that is public, within class module
最简单的方法是将数据定义为 Variant
。这是一个例子:
Option Explicit
Private Sub Command1_Click()
Dim one_offsets(6399) As Single
one_offsets(0) = 33
one_offsets(1) = 44
Dim d As Data
Set d = New Data
d.one_offsets = one_offsets
End Sub
然后在您的数据中 class:
Option Explicit
Private m_1_offsets As Variant
Private m_2_offsets As Variant
Private m_init_d_offsets As Variant
Private m_init_a_offsets As Variant
Private m_e_offsets As Variant
Private m_d_offsets As Variant
Private m_a_offsets As Variant
Private m_final_e_offsets As Variant
Public Property Get one_offsets() As Variant
one_offsets = m_1_offsets
End Property
Public Property Let one_offsets(ByVal Value As Variant)
m_1_offsets = Value
End Property
如果您随后在 Watch window 中检查 m_1_offsets
,您会看到它被定义为 Variant/Single(0 to 6399)
。