Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: Psyke1 en Octubre 11, 2011, 12:18:57 pm
-
Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...):
Option Explicit
Option Compare Binary
'====================================
' º Name : cConcatenator.cls
' º Version : 1.3
' º Author : Psyke1
' º Twitter : @SoyAbsurdo
' º Country : Spain
' º Date : 15/10/11
' º Visit :
' * http://foro.h-sec.org
' * http://infrangelux.sytes.net
'====================================
Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long)
Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long
Private sRet() As String
Private lCount As Long
Private lChunk As Long
Private lTotalLenB As Long
Public Static Sub Append(ByRef sText As String)
Dim lLenB As Long
lLenB = LenB(sText)
If lLenB Then
If lCount > lChunk Then
lChunk = lChunk + lChunk + 1&
ReDim Preserve sRet(lChunk) As String
End If
sRet(lCount) = sText
lCount = lCount + 1&
lTotalLenB = lTotalLenB + lLenB
End If
End Sub
Public Static Property Get LengthString() As Long
LengthString = LengthString \ 2&
End Property
Public Sub ResetAll()
lCount = 0&
lTotalLenB = 0&
End Sub
Public Static Property Get GetString() As String
Dim pDest As Long
Dim lLenBItem As Long
Dim Q As Long
If lCount Then
RtlMoveMemory VarPtr(GetString), VarPtr(SysAllocStringByteLen(0&, lTotalLenB)), 4&
pDest = StrPtr(GetString)
For Q = 0 To (lCount - 1&)
lLenBItem = LenB(sRet(Q))
RtlMoveMemory pDest, StrPtr(sRet(Q)), lLenBItem
pDest = pDest + lLenBItem
Next Q
End If
End Property
Private Sub Class_Initialize()
lChunk = &H270F&
ReDim sRet(lChunk) As String
End Sub
Test comparándola con cStringBuilderl.cls (http://www.vbaccelerator.com/home/vb/code/techniques/StringBuilder/String_Builder_Class_and_Demonstration_zip_cStringBuilder_cls.asp) (la más rápida que encontré en la red):
(http://img171.imageshack.us/img171/5811/carreteraeneldesierto10.jpg)
DoEvents! :P