Rubrik: Variablen/Strings · Sonstiges | VB-Versionen: VB6 | 14.08.07 |
String anhand eines Pointers aus dem Speicherbereich auslesen Mit dieser Funktion lässt sich ein String anhand dessen Zeiger (String-Pointer) aus dem Speicher auslesen. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.357 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Einige API-Funktionen geben anstatt eines Strings desses Pointer (Zeiger auf den String im Speicherbereich) zurück. Mit nachfolgender Funktion lässt sich der String anhand dessen Zeiger aus dem Speicherbereich ermitteln:
Option Explicit ' benötigte API-Deklarationen Private Declare Function lstrcopy 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 String) As Long
Public Function GetStringFromPointer(ByVal lpStrPointer As Long) As String ' String anhand String-Pointer aus dem Speicher ' auslesen und zurückgeben Dim nLen As Long Dim sBuffer As String ' Länge des Strings nLen = lstrlen(lpStrPointer) ' Rückgabewert: Benötigte Größe festlegen sBuffer = Space$(nLen) ' String aus Speicheradresse auslesen... lstrcopy sBuffer, lpStrPointer If InStr(sBuffer, vbNullChar) > 0 Then sBuffer = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1) End If ' ...und zurückgeben GetStringFromPointer = sBuffer End Function
Beispiel zur Demonstration:
Wir speichern einen String in eine Variabe und ermitteln dann mit Hilfe der undokumentierten VB-Funktion StrPtr den Zeiger auf den String im Speicherbereich. Anschließend lesen wir den
Speicher anhand des Zeigers aus und erhalten so unseren ursprünglichen String zurück.
Dim lpStrPointer As Long Dim sText As String sText = StrConv("www.vbarchiv.de", vbFromUnicode) lpStrPointer = StrPtr(sText) ' String anhand des String-Pointers aus dem ' Speicher lesen MsgBox GetStringFromPointer(lpStrPointer)