fb:porticula NoPaste
Private mit Pointern umgehen
| Uploader: |  MOD | 
| Datum/Zeit: | 21.01.2010 18:27:19 | 
#Define varname(n) #n
Type test
    Declare Constructor()
    Declare Sub pr()
    Declare Function k_ptr() As UInteger Ptr
    Public:
    i As Integer
    j As Double
    Private:
    k As Integer
End Type
Constructor test
    this.i = 3 'this nicht nötig
    this.j = 4
    this.k = 5
End Constructor
Sub test.pr()
    Print varname(i) & " hat den Wert: " & i
    Print varname(j) & " hat den Wert: " & j
    Print varname(k) & " hat den Wert: " & k
End Sub
Function test.k_ptr() As UInteger Ptr
    Return @k
End Function
'======================================================================
Dim As test private_test
Print "Ausgabe aller Variablen des Types ueber die interne Sub"
Print "Alle drei Variablen werden wie erwartet angezeigt:"
Print
private_test.pr()
Sleep
Cls
'======================================================================
Print "Ausgabe ueber den Variablennamen des Types - Direktzugriff!"
Print "k musste auskommentiert werden, weil es geschuetzt wird"
Print
Print varname(i) & " hat den Wert: " & private_test.i
Print varname(j) & " hat den Wert: " & private_test.j
'Print varname(k) & " hat den Wert: " & private_test.k
Sleep
Cls
'======================================================================
Print "Wie waer's mit Pointern?"
Print
Print "Da wir wissen wie viele Variablen im Type stecken, holen wir uns k"
Print "illegalerweise ueber den Pointer"
Print
Sleep
Print "Dafuer muessen wir etwas umstaendlich zwischen UInteger und UInteger Ptr casten"
Print "und schwups haben wir die richtige Adresse"
Dim As UInteger Ptr pointer_to_k = Cast(UInteger Ptr, Cast(UInteger, (@private_test.j)) + 8)
Print
Sleep
Print "Zur Sicherheit mal die Adressen anzeigen lassen: "
Print private_test.k_ptr, pointer_to_k
Print
Sleep
Print varname(k) " hat den Wert: " & *pointer_to_k
Sleep
Cls
'======================================================================
Print "Und so zeigt sich mal wieder: Pointer sind klasse! ;)"
Print
Print "Ende"
Sleep
	


			FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!



