Excel VBA: come passare una stringa come puntatore a una procedura per aggiungere la stringa?

StackOverflow https://stackoverflow.com/questions/6045592

  •  15-11-2019
  •  | 
  •  

Domanda

Voglio passare una stringa come parametro in / out a una procedura.So che questo non è come il VBA di solito funziona, ma questo è a causa di un caso speciale.Ho uno strumento generatore del generatore di codice già esistente per un codice per un parser in formato file.E non voglio hackerare questo codice.La sintassi generata può essere facilmente convertita su VBA utilizzando il testo Sostituisci questo nessun grosso problema (l'ho già fatto).Ma è difficile cambiare prododeri alle funzioni.

Quello che ho capito è come posso estendere una stringa passando il suo puntatore.Ma come posso aggiungere i caratteri alla stringa?

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, Source As Any, _
    ByVal length As Long)

Private Declare Function lstrlenA Lib "kernel32" _
   (ByVal lpString As Long) As Long

Private Declare Function lstrlenW Lib _
  "kernel32" (ByVal lpString As Long) As Long


Sub AppendString(i_pt As Long, i_what As String)
    Dim strLentgh As Long                  ' variable to hold the length of string
    Dim ptrLengthField As Long             ' pointer to 4-byte length field

    ' get the length of the string
    ptrLengthField = i_pt - 4              ' length field is 4 bytes behind
    CopyMemory strLentgh, ByVal ptrLengthField, 4

    ' extend the String length
    strLentgh = strLentgh + (Len(i_what) * 2)
    CopyMemory ByVal ptrLengthField, strLentgh&, 4

    ' How to apped the string?
    ' CopyMemory ByVal i_pt, ????
End Sub

Sub test2()
    Dim str As String
    Dim sPtr As Long

    str = "hello"
    sPtr = strPtr(str)

    Debug.Print Len(str)
    Call AppendString(sPtr, " there")
    Debug.Print Len(str)
    Debug.Print str
End Sub
.

È stato utile?

Soluzione

VBA can do this natively

Sub AppendString(byref str as string, i_what As String)
    str = str & i_what
end sub

To test

Sub Test()
    Dim s As String

    s = "Hello"

    AppendString s, " World"
    Debug.Print s
End Sub
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top