Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 26.01.2015, 11:58 Titel: Pointer-Fragen |
|
|
Hallo leute, also immer diese Pointer, die bereiten mir immer wieder Kopfschmerzen.
Es geht in dieser Frage um Image Destroy und das zurücksetzen auf 0
gedacht hatte ich mir folgendes wobei ich jetzt skeptisch geworden bin ob das auch so richtig ist.
z.B.
Code: | Dim As Any Ptr bild = ImageCreate(x,y)
bild = DestroyImage( bild )
Function destroyimage( destroyimagebild As Any Ptr ) As Any Ptr
ImageDestroy(destroyimagebild)
Return 0
End Function |
Ps: und mir wäre es lieber wenn ich nicht bild = DestroyImage() schreiben müsste, sondern die Function den Übergebenen Wert automatisch auf Null setzt (auch ohne Shared). |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 26.01.2015, 12:37 Titel: |
|
|
Hallo braesident!
Pointer sind doch etwas herrliches!
Du könntest den Pointer ByRef übergeben: Code: | Declare Sub destroyimage(ByRef bild As Any Ptr)
ScreenRes 300,300
Dim As Any Ptr bild = ImageCreate(200,200)
Print bild
destroyimage( bild )
Print bild
Sleep
Sub destroyimage(ByRef bild As Any Ptr )
ImageDestroy(bild)
bild = 0
End Sub
|
Gruß
grindstone
EDIT: In der Referenz ist ein Schreibfehler. Ganz am Anfang des Textes muß es "BYREF" heißen und nicht "BYVAL". _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 26.01.2015, 15:12 Titel: |
|
|
Hi,
(Referenz geändert)
Noch eine Lösung mit MACRO
Code: | #Macro DestroyImage(a)
If a Then
ImageDestroy(a)
a = 0
EndIf
#EndMacro
ScreenRes 400, 400
Dim As Any Ptr bild = ImageCreate(200,200)
? bild
DestroyImage(bild)
? bild
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 26.01.2015, 15:25 Titel: |
|
|
danke grindstone und volta
ja Pointer sind schon ne tolle Sache aber ich komm da immer wieder durcheinander. vor allem wenn ich aus beispielen oder bibliotheken versuche zu rekonstruieren wo was hingeht oder herkommt wie zB:
Code: | Dim As FT_Bitmap Ptr bitmap = @Schrift->glyph->bitmap
Dim As UByte Ptr source = bitmap->buffer |
gerade -> bereitet immer wieder probleme. Und immer wenn ich nachgelesen habe und denke jetzt hab ich es verstanden dann bekomm ich es doch nicht hin |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 26.01.2015, 20:00 Titel: |
|
|
-> ist nichts anderes als ein Record-Aufruf, wie der Punkt bei 'normalen' Daten, nur hier eben bei Pointern. Da @Schrift ein Pointer ist, kannst du auf sin Record glyph über @Schrift->glyph zugreifen; das ist wieder ein Pointer auf ein UDT mit dem Record bitmap, also Aufruf über @Schrift->glyph->bitmap.
Allerdings sehe ich jetzt den tieferen Sinn nicht, warum man nicht stattdessen Schrift.glyph->bitmap schreibt. Schrift ist ein UDT (kein Pointer) mit dem Record glyph, der deshalb über Schrift.glyph aufgerufen werden kann (glyph selbst aber ist wieder ein Pointer, deswegen geht es danach mit -> weiter).
(Du könntest auch dereferenzieren und *(Schrift.glyph).bitmap schreiben, aber das ist umständlicher und nicht leichter lesbar.)
edit:
ok, falsch, Schrift muss auch ein Pointer sein; @Schrift->glyph->bitmap heißt nämlich nicht (@Schrift)->glyph->bitmap, sondern @(Schrift->glyph->bitmap). Da wird wohl nur der Pointer auf den Pointer übergeben, oder das Record bitmap selbst ist kein Pointer. Müsste man die Datenstruktur kennen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 31.01.2015, 12:57 Titel: |
|
|
zu der Datenstruktur kann ich nicht viel sagen. Das Beispiel stammt auf jedenfall aus der Freetype2-bibliothek. |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 31.01.2015, 21:39 Titel: |
|
|
Die Datenstruktur muss ja in der zugehörigen bi-Datei definiert sein. Schau sie dir ruhig an, dann ist das ganze leichter nachzuvollziehen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
|