Det är så att jag kallar på ett API kommando som ger tillbaka en pointer till en char-array (ifrån C/C++).. Internet är en bra kunskapskälla ;-) Du skulle kunna göra såhär.. Tänkte bara vara en besserwisser lite... <hmm> en liten detalj.. Jag har inte den blekaste om hur lång char-array:n är... och att använda CopyMemory är något jag redan har gjort.. Men då genom att fylla en typ String (i vb) med 4096 tecken och sen läsa in så många tecken och sedan leta efter chr(0). Men det jobbiga är om man får en sträng som är längre en 4096 byte (inte så jätte troligt, men kan hända) så funkar det inte..Hur får jag en Pointer till en sträng?
Är det någon som vet hur jag får den från en adress till en vb-sträng?
Jag lyckas inte få det att funka..
MVH
//JonasSv: Hur får jag en Pointer till en sträng?
http://www.vbexplorer.com/files/APITUTOR.htm
/pelleSv: Hur får jag en Pointer till en sträng?
Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Function StringFromPointer(Pointer As Long, Length As Long) As String
Dim Bytes() As Byte
ReDim Bytes(0 To Length-1)
Call CopyMem(Bytes(0), ByVal Pointer, Length)
StringFromPointer = StrConv(Bytes(), vbUnicode)
End Function
Busenkelt. ;)
Notera att du behöver längden av strängen för detta att fungera. Om du saknar längden måste du kopiera byte-för-byte tills dess att du hittar ett tecken med ASCII värde 0 (C++/C strängar slutar alltid med ASCII värde 0). Sv: Hur får jag en Pointer till en sträng?
En C/C++-sträng är ett felaktigt uttryck. En null-terminerad tecken-array är en C-sträng. En objekt av klassen string är en C++-sträng.
Båda existerar i C++, men är olika saker. (Fast man i regel implementerar C++-strängar med C-strängar)
/Niklas JanssonSv: Hur får jag en Pointer till en sträng?
Men jag löste det genom att göra såhär:
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Public Function StringFromPointer(ByVal lPointer As Long) As String
Dim sTemp As String
Dim lRetVal As Long
'create the buffer
sTemp = String$(lstrlen(ByVal lPointer), 0)
'copy the string into memory
lRetVal = lstrcpy(ByVal sTemp, ByVal lPointer)
'if value exist the return value
If lRetVal Then StringFromPointer = sTemp
End Function
Tack iaf!
MVH
//Jonas