Как получить строку с адреса, указанного в long в VB - PullRequest
0 голосов
/ 13 октября 2010

В vba, есть адрес, содержащий длинный тип, который указывает на строку с нулевым символом в конце, но я не могу найти способ получить строку с этого адреса:Не могли бы вы пролить свет на это?

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

Я использую CopyMemory таким образом:

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 Function pvToString(ByVal lPtr As Long) As String
    If lPtr <> 0 Then
        pvToString = String(lstrlenA(lPtr), 0)
        Call CopyMemory(ByVal pvToString, ByVal lPtr, Len(pvToString))
    End If
End Function
3 голосов
/ 13 октября 2010

Если по какой-то причине у вас появился указатель на ANSII-строку с нулевым окончанием в VBA, вам необходимо скопировать содержимое в строку:

Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal m_pBase As Long, ByVal l As Long) As String
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As Long

...
dim s as string    
s = SysAllocStringByteLen(str_address, lstrlen(str_address))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...