 |
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 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 19.09.2006, 17:04 Titel: Progammglobale Variablen? Solved |
|
|
Experimentiere gerade mit statischem Linken herum. (Bitte jetzt keine Diskussion, warum DLL's besser sind usw....). Habe keinen Weg gefunden, programmglobale Variablen hinzukriegen, die also in allen Modulen gelten. In C/C++ gibt's dafür das Schlüsselwort "extern", mit dem man aus den Headerfiles heraus auf die eigentliche Deklaration im Object File referenziert. Bei dem EXTERN von FB scheint das irgendwie anders gemeint zu sein, denn hier dürfen DIM und EXTERN derselben Variable nie gleichzeitig in derselben Datei vorkommen. Nun habe ich folgendes versucht:
Code: |
'modul1.bas
dim i1 as integer
FUNCTION foo() as integer
i1=1
END FUNCTION
|
Kompiliere fbc -lib modul1.bas ==> libmodul1.a
Code: |
'haupt.bas
DECLARE FUNCTION foo() as integer
extern i1 alias "i1" as integer
foo()
? i1
sleep
|
Kompiliere fbc -a libmodul1.a haupt.bas ==> undefined reference to "i1". Mit alias "I1" hab ichs auch schon versucht.
Vielen Dank schon mal und viele Grüsse!
Croco
Zuletzt bearbeitet von croco97 am 19.09.2006, 17:10, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 19.09.2006, 17:05 Titel: |
|
|
Sorry, noch ne Korrektur: Das DIM muss natürlich ein DIM SHARED sein, sonst kann es nicht gehen.
Grüsse!
Croco |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 19.09.2006, 17:13 Titel: |
|
|
Oh Mann. Da sucht man ne Stunde lang rum, probiert alles aus, entscheidet schliesslich, den Fall zu posten, beim Posten fällt einem noch ne allerletzte Möglichkeit ein, die man noch nicht probiert hat, man probiert sie - und es funktioniert...
Die Aussage, dass EXTERN und DIM derselben Variable nicht im selben Programm funktionieren, stimmte nicht. Siehe:
Code: |
'modul1.bas
extern i1 alias "i1" as integer
dim shared i1 as integer
FUNCTION foo() as integer
i1=1
END FUNCTION
|
Rest wie eingangs schon versucht. Und dann geht's. EXTERN dient also nicht nur der Verlinkung im aufrufenden Programm, sondern auch der Erstellung des Links.
Grüsse!
Croco |
|
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.
|
|