Danke für die Antworten, jetzt dachte ich mir, vielleicht die Overlay in
die Funktionen zu verlegen - das wird aber recht gemein...
Folgendes ist syntaktisch korrekt und kann problemlos im Bascom-Emulator
gestartet werden.
1 | $baud = 19200
|
2 | Declare Sub Test1(byval Lng As Long)
|
3 | Declare Sub Test2(byref Lng As Long)
|
4 | Dim Lng As Long
|
5 | Dim Lng2 As Long
|
6 | Lng = 12345678
|
7 | Lng2 = 87654321
|
8 | Call Test1(lng)
|
9 | Call Test1(lng2)
|
10 | Call Test2(lng)
|
11 | Call Test2(lng2)
|
12 | Return
|
13 |
|
14 | Sub Test1(byval Lng As Long)
|
15 | Dim Lngbytes(4) As Byte At Lng Overlay 'geht auf die globale lng!!!!!
|
16 | Print Lngbytes(1)
|
17 | Print Lngbytes(2)
|
18 | Print Lngbytes(3)
|
19 | Print Lngbytes(4)
|
20 | End Sub
|
21 |
|
22 | Sub Test2(byref Lng2 As Long)
|
23 | Dim Lng2bytes(4) As Byte At Lng2 Overlay 'geht auf die globale lng2!!!!!
|
24 | Print Lng2bytes(1)
|
25 | Print Lng2bytes(2)
|
26 | Print Lng2bytes(3)
|
27 | Print Lng2bytes(4)
|
28 | End Sub
|
Die Overlays beziehen sich jetzt (klarerweise?!) auf die Speicherplätze
der globalen Variablen LNG und LNG2 des Hauptprogrammes. Ganz zufrieden
bin ich mit solchen Ergebnissen vor allem punkto strukturierter
Programmierung nicht ... werd wohl auf die Byteslösung ausweichen oder
eine globale Hilfsvariable mit Byte-Overlay verwenden.
So funktionierts meines Erachtens am Klarsten (mit globaler
Hilfsvariable x):
1 | $baud = 19200
|
2 | Declare Sub Test(byref Lng As Long)
|
3 | Dim Lng As Long
|
4 | Dim Lng2 As Long
|
5 | Dim X As Long
|
6 | Dim Xbytes(4) As Byte At X Overlay
|
7 | Lng = 12345678
|
8 | Lng2 = 87654321
|
9 | Call Test(lng)
|
10 | Call Test(lng2)
|
11 | Return
|
12 |
|
13 | Sub Test(byref Lng As Long)
|
14 | X = Lng
|
15 | Print Xbytes(1)
|
16 | Print Xbytes(2)
|
17 | Print Xbytes(3)
|
18 | Print Xbytes(4)
|
19 | End Sub
|
Bascom ist halt so schön zu programmieren, weil es so total ähnlich zu
VBA und .NET ist, allerdings bei der durchstrukturierten Programmierung
muss man sich umstellen und Abstriche in Kauf nehmen.. sonst wärs ja C