Excel VBA: come passare una stringa come puntatore a una procedura per aggiungere la stringa?
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
. 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