 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.07.2006, 15:57 Titel: EXE stürzt ab |
|
|
Hallo.
Neuerdings stürzt mir mein Programm mit einer Windows-Fehlermeldung ab. Also gut, Programm
mit -exx kompiliert, und siehe da, die Fehlermeldung lautet:
Zitat: |
Aborting due to runtime error 1 (illegal function call) at line 73 of c:/test/tmp.bas
|
Die betreffende Zeile lautet
Code: |
DIM SHARED Fonts(32 TO 255, 0, 0) AS BYTE
|
Ich weiß echt nicht, wo da der Fehler sein soll...
Weiß jemand Rat?
Danke im Voraus,
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.07.2006, 16:21 Titel: |
|
|
Kannst du mal etwas mehr Code rund um Zeile 73 zeigen?
Oder besser noch den ganzen Code?
Bei der druchnummerirung der Zeilen gibt es ja auch verschiedene System:
Ist
Code: | ? _
"Hello World"
sleep |
3 Zeilen lang oder ist das eine Zeile lang?
Code: | ? "Hello World": sleep |
_________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.07.2006, 17:19 Titel: |
|
|
Dem kann ich nur zustimmen!
Die Dim-Anweisung allein kompiliert, ergibt nämlich bei FB0.16bSE keinen Fehler..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.07.2006, 18:53 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Vielleicht machst du die SHARED Anweisung innerhalb einer SUB/FUNCTION? |
Das sollte aber keinen Laufzeit Fehler geben, sondern vom Compiler abgefangen werden. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.07.2006, 19:54 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Vielleicht machst du die SHARED Anweisung innerhalb einer SUB/FUNCTION? | Naja, ich finde, daß du im amerikanischen Forum etwas ausführlicher gewesen bist..
..ich wiederhole mich gern: QuellCode posten könnte helfen..
(v1ctor z.B. reagiert äußerst ungehalten, wenn zu Fragen kein Quellcode gepostet wird.
Mal schauen, vllt. finde ich die Seite wieder..)
Ich habe einfach nur probiert, was der Compiler sagt, wenn ich folgenden Code: | DIM SHARED Fonts(32 TO 255, 0, 0) AS BYTE
Sleep | übersetze..
Wie erwartet, sagt er nix, denn FB kann bis zu 4 Dimensionen vertragen..
(Würde also für eine TastenTabelle mit Normal, Shift, Control und Alt reichen )
..auch die Indizes 0 sind syntaktisch korrekt.
Wie gesagt, war nur ein Test..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.07.2006, 22:31 Titel: |
|
|
@Michael Frey: Ich benutze das _ nicht, und auch mehrere Befehle in einer Zeile kommen nicht vor,
daher sollte Zeile 73 schon stimmen.
Um die Zeile 73 herum sind aber nur DECLAREs, also frage ich mich, wo der Fehler liegen soll...
Der eigentliche Fehler liegt in der Schriftroutine, hier deren Quellcode:
Code: |
' *****************************************************************************
' Diese SUB gibt einen Text im aktuell geladenen Font aus
sub PrintFont (Destination as any ptr = 0, xpos as integer, ypos as integer, Text as string, farbe as long = rgb(0, 0, 0), Umbruch as integer = 0, MaxPositionX as integer = 800)
dim CharCount as integer
dim char as string
dim as integer mainxpos, mainypos
mainxpos = xpos
mainypos = ypos
for CharCount = 1 to len(Text) step 1
char = mid$(Text, CharCount, 1)
CharIndex = asc(char)
if (CharIndex > 31) then
for y = 1 to MaxFontYWidth step 1
for x = 1 to ubound(Fonts, 2) step 1
if Fonts(CharIndex, x, y) then
pset Destination, (x + mainxpos, y + mainypos), farbe
end if
next x
next y
elseif char = chr$(13) then
mainxpos = xpos
mainypos+ = MaxFontYWidth
end if
mainxpos+ = FontXWidth(CharIndex)
if (mainxpos > MaxPositionX) and Umbruch then
mainxpos = xpos
mainypos+ = MaxFontYWidth
elseif (mainxpos > MaxPositionX) and (Umbruch = 0) then
exit for
end if
next CharCount
end sub
|
Denn wenn diese Routine nicht aufgerufen wird, erscheint der Fehler nicht...
Allerdings sehe ich da nichts Falsches...
/edit: Wenn ich diese beiden Zeilen auskommentiere und ersetze, dann klappt es ohne Probleme:
Code: |
char = mid$(Text, CharCount, 1)
CharIndex = asc(char)
|
Frag mich trotzdem wo da der Fehler ist...
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.07.2006, 22:43 Titel: |
|
|
Ahhh, danke ich schaus mir gleich mal an..
http://www.freebasic.net/forum/viewtopic.php?t=2668
..inzwischen habe ich auch die Seite gefunden, die zeigt, wie v1ctor reagieren kann
(ganz am Ende..)
[Edit]
Du hast geschrieben: Code: | Dim shared Fonts(32 To 255, 0, 0) As Byte |
Im UP schreibst du: Code: | For x=1 To UBound(Fonts, 2) |
Kann nicht gehen, weil UBound(Fonts, 2)=0 und x fängt bei 1 an und wird um 1 erhöht..
..vllt. liegts daran
btw: Step 1 ist default und kann weggelassen werden..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.07.2006, 23:07 Titel: |
|
|
Nene, wenn der Font geladen wird, ist die zweite/dritte Dimension ja nicht mehr 0...
Das Array ist ja dynamisch...
Das STEP 1 hab ich mir halt angewöhnt, ich find's übersichtlicher.
Es tut ja keinem weh
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.07.2006, 23:17 Titel: |
|
|
Schade, mit den Informationen, die ich hatte, wärs das gewesen..
..tja, wennde nicht mehr rausrückst..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 07.07.2006, 23:19 Titel: |
|
|
Na
Ich hab den Fehler gefunden: Ich hab jetzt das OPTION BASE 1 entfernt, und schon klappt's... Strange - ähm - seltsam
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 07.07.2006, 23:37 Titel: |
|
|
Hättest du gleich den ganzen Code gepostet, wären wir schon viel eher darauf gekommen..
Bin mal gespannt auf deine Erklärung im freeBasic.net/forum
btw: Option Base 1 bedeutet, daß alle Indizes mit 1 anfangen..
kann sein, daß dein dynamisches Array da eine gewisse Eigendynamik entwickelt
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 08.07.2006, 15:16 Titel: |
|
|
Schon klar, ich weiß was OPTION BASE 1 bedeutet.
Im englischen Forum hat ja einer geschrieben, ich sollte das Array mit
Code: | DIM Fonts(32 TO 255, 1, 1) AS BYTE |
dimensionieren, hat aber nichts gebracht.
Daher hab ich mir gedacht, dass das OPTION BASE 1 nichts damit zu tun hat, weißt du?
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 08.07.2006, 16:53 Titel: |
|
|
Wie du aus freeBasic.net/forum weißt, habe ich die Dimensionierung mit 0 getestet..
..und es funktioniert
Obwohl logisch wäre es, wenn es nicht funktionierte..
Dim Irgendwas(1) bedeutet, daß Irgendwas EIN Element hat:
Je nach Option Base mit 1 oder 0 bezeichnet.
Demnach würde Dim Irgendwas(0) bedeuten, daß Irgendwas KEIN Element hat..
..aber halt, bei Option Base 0 hat es EIN Element:Irgendwas(0)
Und was passiert, wenn..
..und wenn dann noch $Dynamic Oder Option Dynamic ins Spiel kommt..
($Dynamic is deprecated..)
..dann nur noch ReDIMmen..
Ich glaube, da ist noch'n Torturial fällig
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|