当前位置:  开发笔记 > 后端 > 正文

超出Visual Basic 6中的字符串空间

如何解决《超出VisualBasic6中的字符串空间》经验,为你挑选了1个好方法。

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

哎呀



1> Jack Bolding..:

正如其他人所指出的那样,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方法将返回实际使用的字符串部分.


您应该使用可用的$版本的函数.否则很棒的StringBuilder类:)
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有