#excel #kernel32 #vba
#excel #kernel32 #vba
Вопрос:
Я хочу передать строку в качестве параметра ввода / вывода в процедуру. Я знаю, что обычно VBA работает не так, но это из-за особого случая. У меня уже есть инструмент code generator — генерирующий код для анализатора формата файла. И я не хочу взламывать этот код. Сгенерированный синтаксис можно легко преобразовать в vba, используя text replace, это не имеет большого значения (я это уже делал). Но это сложно изменить программы на функции.
Я выяснил, как я могу расширить строку, передав ее указатель. Но как я могу добавить символы к строке?
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, strLentghamp;, 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
Ответ №1:
VBA может сделать это изначально
Sub AppendString(byref str as string, i_what As String)
str = str amp; i_what
end sub
Для тестирования
Sub Test()
Dim s As String
s = "Hello"
AppendString s, " World"
Debug.Print s
End Sub
Комментарии:
1. ох .. Я думал, что пробовал это, но… aaa .. хм … 🙂 спасибо, Крис!
2. знаете ли вы, что
AppendString(s, "World")
они не работают таким же образом, какAppendString s, "World"
илиCall AppenString(s, "World")
? Просто потому, что это интересно, почему это другое поведение?