Jag har en referens till en dll som är skriven i C++. Denna returnerar pekaren till en sträng. Jag använder API'et 'RtlMoveMemory' för detta. Hej Har ingen C++ pekare att testa med. Men kanske funkar: Hej. Tack för svaren, jag har dock fortsatt huvudbry :-|Läsa en sträng från en C++ dll
Nu till mitt problem. Jag får inte tillbaka hela strängen utan bara en del av den. Är det någon som vet (eller har ngn idé) vad jag gör för fel.
//UJ
<code>
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _
Any, source As Any, ByVal bytes As Long)
Function StringFromBSTR(ByVal pointer As Long) As String
Dim temp As String
' copy the pointer into the temporary string's BSTR
CopyMemory ByVal VarPtr(temp), pointer, 8
' now Temp points to the original string, so we can copy it
StringFromBSTR = temp
' manually clear then temporary string to avoid GPFs
CopyMemory ByVal VarPtr(temp), 0&, 8
End Function
</code>Sv: Läsa en sträng från en C++ dll
>CopyMemory ByVal VarPtr(temp), 0&, 8
Du skriver 8 i antal bytes , Du skall skicka Len(temp)
CopyMemory ByVal VarPtr(temp), 0&, Len(temp)
mvh
SvenSv: Läsa en sträng från en C++ dll
<code>
Option Explicit
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As String, Byval lpString2 As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (Byval lpString As Long) As Long
Function StringFromBSTR(ByVal Pointer As Long) As String
Dim Length As Long
Dim Buffer As String
Length = lstrlen(ByVal Pointer)
If Length >0 Then
Buffer = String(Length, 0)
lstrcpy ByVal Buffer, ByVal Pointer
StringFromBSTR = Buffer
End If
End FunctionSv: Läsa en sträng från en C++ dll
SvenPon
>CopyMemory ByVal VarPtr(temp), 0&, Len(temp)
Problemet är ju att Len(temp)=0 eftersom det är tom sträng. Har du ngn annan bra idé så är jag evigt tacksam.
Andreas Hillqvist
Length = lstrlen(ByVal Pointer) returnerar alltid 1. Finns det ngt annat API anrop som kan fungera?
//UJ