Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Private mit Pointern umgehen

Uploader:RedakteurMOD
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