Visual Basic中的字符串空间6

我们在VB6应用程序中收到错误,该应用程序通过TCP套接字来回发送数据.我们得到一个运行时错误“超出字符串空间”.有没有人看到这个或有什么想法为什么会发生这种情况?看来我们正在点击一些VB6阈值,所以任何其他的想法也是有帮助的.

THKS,
AK

正如其他人所指出的那样,VB中的每个字符串连接将分配一个新的字符串,然后将数据复制到一个可以的位置上,然后将它们解除分配.在循环中可能会导致问题.

解决这个问题,你可以创建一个简单的StringBuilder类,如下所示:

Option Explicit

Private data As String
Private allocLen As Long
Private currentPos As Long

Public Function Text() As String
  Text = Left(data,currentPos)
End Function

Public Function Length() As Long
  Length = currentPos
End Function

Public Sub Add(s As String)

  Dim newLen As Long
  newLen = Len(s)
  If ((currentPos + newLen) > allocLen) Then
    data = data & Space((currentPos + newLen))
    allocLen = Len(data)
  End If

  Mid(data,currentPos + 1,newLen) = s
  currentPos = currentPos + newLen

End Sub

Private Sub Class_Initialize()
  data = Space(10240)
  allocLen = Len(data)
  currentPos = 1
End Sub

此类将通过强制字符串使用其中的空格来构建字符串数量,然后根据需要覆盖空格来最小化字符串分配的数量.当它发现它没有足够的预先初始化空间时,它会重新分配大小的一半. Text方法将返回实际使用的字符串部分.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...