Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 16.07.2009, 11:52 Titel: Die lieben Pointer |
|
|
Guten Morgen
Mal wieder eine kleine Frage:
Kann man einen Beliebigen Pointer an eine Prozedur übergeben ohne das sich der Compilter mit "Suspicious pointer assignment" beschwert und ohne wild in der Gegend "rumzucasten" ?
Der ANY PTR wäre eigentlich ideal, aber der Compiler beschwert sich ja leider auch dabei, wenn er einen andere Art von Pointer übergeben bekommt als ANY PTR.
Um den Sinn dieser Prozedur kurz zu erläutern: Ich möchte erstmal feststellen ob der Pointer größer als 0 ist (was ja mit jeder art von Pointer funktioniert) und dann auf dieser Tatsache entscheiden lassen ob dieser Pointer an eine weitere Prozedur weitergegeben wird oder nicht. Dabei passieren noch eine paar andere dinge, die aber nicht weiter von bedeutung für meine frage sind..
Vielen Dank schon mal! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 16.07.2009, 12:17 Titel: |
|
|
Hallo,
du könntest das CASTen einfach automatisieren und dann in der Prüffunktion mit ANY PTR arbeiten:
Code: | #macro IsNullPointer (Zeiger)
PruefPointer (CAST(ANY PTR, Zeiger))
#endmacro
FUNCTION PruefPointer (X AS ANY PTR) AS STRING
IF X = 0 THEN
RETURN "NULL"
ELSE
RETURN "NICHTNULL"
END IF
END FUNCTION
DIM X AS INTEGER = 123
DIM Y AS INTEGER PTR = 0
PRINT IsNullPointer(@X)
PRINT IsNullPointer(Y)
SLEEP |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 16.07.2009, 12:47 Titel: |
|
|
ist aber auch ohne casting kein Problem
Code: | Type _xyz
x As Short
y As Short
z As Integer
End Type
Dim xyz As _xyz
Function pointertest(x As Any Ptr) As Integer
If x = 0 Then Return 0
Return -1
End Function
Screen 18
Dim As Byte Ptr b=ScreenPtr
? pointertest(b)
Dim As Integer Ptr c=ScreenPtr
? pointertest(c)
Dim As ZString Ptr s=@"String"
? pointertest(s)
Dim As Any Ptr t = @xyz
? pointertest(t)
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|