Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 10.09.2014, 20:34 Titel: Programm aus Programm aufrufen |
|
|
Hi Gemeinde!
ich wollte man nachfragen, ob ich bzw. wie ich sinniger Weise ein Programm von einem Programm aus aufrufe.
Ich möchte mit dem Aufruf Parameter übergeben und Ergebnisse zurück erhalten.
Genauer: Programm B besteht aus einer festen Eingabe, einer Rechen- und Ausgabeschleife in eine Datei. Ich möchte nun dieses Programm von Programm A aus derart steuern, dass ich zB erreiche, dass das Prog B eine oder auch mehrere Progdurchläufe unternimmt und mir die Daten übergibt, also ich bestimme wo und wie die gespeichert werden.
Wie macht man das denn?
grüsse aus der Gewitterstadt nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 10.09.2014, 23:56 Titel: |
|
|
Hallo Nils
Der Befehl, den du suchst, heißt "Chain". Eine direkte Parameterübergabe ist, anders als bei FB (dort gibt es dafür den Befehl "Command"), bei QBasic allerdings nicht möglich. Hier müsstest du zum Informationsaustausch den Umweg über eine Datei wählen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 11.09.2014, 00:00 Titel: |
|
|
Hallo,
vielleicht wäre es sinnvoll, beide Programme in eins zusammenzulegen und mit SUBs und FUNCTIONs (Unterprogrammen) zu arbeiten. FUNCTIONs können auch Werte zurückgeben.
Wenn tatsächlich mehrere compilierte Programme zusammenarbeiten sollen, könnten COMMAND und OPEN PIPE interessante Schlüsselwörter sein.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 954 Wohnort: Austria
|
Verfasst am: 11.09.2014, 11:09 Titel: |
|
|
OPEN PIPE gibts meines Wissens nach in QB nicht.
Es kommt darauf an was das für ein Programm ist, mit dem du kommunizieren willst und in welcher Form du es vorliegen hast.
Wenn du beispielsweise ein 16-Bit DOS Programm in kompilierter Form (.exe) hast würde es durchaus Sinn machen QB zu verwenden.
In allen anderen Fällen würde ich davon abraten bzw. manche Kombinationen sind mit QB erst gar nicht möglich.
Bei 32-Bit oder 64-Bit Windows/Linux Programmen in kompilierter Form kannst du z.B. OPEN PIPE in FreeBasic verwenden. FB unterstützt jedoch bidirektionale Pipes nicht von Haus aus - wenn du sowas brauchst müsstest du auf die entsprechenden APIs des jeweiligen Betriebssystems zurückgreifen.
Wenn du den Quellcode vorliegen hast ist eine direkte Integration in dein Programm via Unterprogramme/Module wohl am einfachsten, wie von Sebastian bereits genannt. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 11.09.2014, 12:04 Titel: |
|
|
@ alle:
Danke für Eure Antworten!
Programm B ist ein QB Prog.
Mir kam der "Fernsteuergedanke", weil ich nicht gerne in einem gut funktionierenden Programm rumfummle. Außerdem könnte man es sozusagen "taub schalten" und nur über Prog A nutzen.
Schade, dass es da keine Hilfe für mich gibt.
nils (nach dem regen ist vor dem regen) _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.09.2014, 14:52 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Hallo Nils
Der Befehl, den du suchst, heißt "Chain". Eine direkte Parameterübergabe ist, anders als bei FB (dort gibt es dafür den Befehl "Command"), bei QBasic allerdings nicht möglich. Hier müsstest du zum Informationsaustausch den Umweg über eine Datei wählen.
Gruß
grindstone |
Hmm, das ist jetzt schon bald 10 Jahre her, aber ich habe irgendwie in Erinnerung, dass es da einen Unterschied zwischen CHAIN und RUN gab, und man die globalen Variablen des einen Programms noch im anderen sehen konnte, solange man den QB-Interpreter nutzte. Ist natürlich nicht wirklich nützlich weil's nur interpretiert funktioniert. Erinnere ich mich da falsch? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 11.09.2014, 16:26 Titel: SUBs und FUNCTIONs |
|
|
St_W hat Folgendes geschrieben: | OPEN PIPE gibts meines Wissens nach in QB nicht. |
Ja, klar, OPEN PIPE ist neu in FreeBASIC. Ich hab nicht auf die Rubrik geachtet. In QB bleibt einem eigentlich nur der Umweg über externe Dateien.
Nils hat Folgendes geschrieben: | Mir kam der "Fernsteuergedanke", weil ich nicht gerne in einem gut funktionierenden Programm rumfummle. |
Normalerweise realisiert man das, indem man Unterprogramme schreibt. Die sollten nur ihre Parameter verarbeiten und am Ende ein Ergebnis irgendeines Typs liefern. Das Programm drumherum sollte normalerweise keine Auswirkungen auf das innere Funktionieren der Unterprogramme haben. Man macht sich diesen Vorteil natürlich kaputt, wenn man Daten mit SHARED oder COMMON "kreuz und quer" durch alle Ebenen des Programms wurstelt.
Bei Unterprogrammen ist es typischerweise so, dass der Aufrufer nur die Schnittstelle des Unterprogramms, seine Signatur, kennen muss, um es zu benutzen. Wie es intern funktioniert, braucht den Aufrufer nicht zu interessieren. Das "Innenleben" des Unterprogramms kann jederzeit geändert werden, ohne dass dies Auswirkungen auf das umgebende Programm hat, wenn weiterhin die definierten Vor- und Nachbedingungen erfüllt werden.
Unterprogramme haben viele Vorteile:
- Erstellen eigener "Befehle": Codes, die mehrfach in einem Programm gebraucht werden, können mit einem einzigen "Wort" aufgerufen werden, ähnlich wie SLEEP oder BEEP, und müssen nicht mehrfach geschrieben werden.
- Dadurch Vermeidung von Redundanzen ...
- und verbesserte Wartbarkeit des Programms. Ich muss meine Berechnung nur an einer Stelle zentral im Programm ändern, um alle Vorkommen davon abzudecken. Ich muss nicht an x Stellen im Programm suchen, wo überall eine bestimmte Berechnung (Fläche eines Kreises oder irgendwas) vorkommt
- Wiederverwendbarkeit: Ein Unterprogramm mit einem bestimmten Zweck (Liste der Dateien in einem Verzeichnis ermitteln, Oberfläche einer Kugel anhand ihres Radius berechnen, ...) lässt sich nicht nur in diesem Programm benutzen, sondern auch später in anderen Programmen "recyclen".
- Flexibilität: Ein Unterprogramm kann später leicht ausgetauscht / überarbeitet werden, ohne dass man das ganze Programm neu schreiben muss.
Hier mal ein Beispiel (FreeBASIC; das Prinzip ist auch auf QB übertragbar, auch dort gibt es SUBs und FUNCTIONs) zum Austausch des "Innenlebens" einer FUNCTION, ohne dass das Hauptprogramm dadurch betroffen ist:
Code: | ' FreeBASIC-Code
' Anm.: Das Berechnungsbeispiel ist nicht sehr sinnvoll. Es soll lediglich einen
' Eindruck Richtung Geheimnisprinzip / Abstraktion liefern.
' Multipliziert 2 positive Ganzzahlen und gibt das Ergebnis als Integer zurueck.
' Wird mind. 1 negative Zahl uebergeben, wird immer der Fehlerwert -1 zurueckgeliefert.
Declare Function MultiplizierPositiveZahlen (A As Integer, B As Integer) As Integer
Dim As Integer x, y, ergebnis
Input "x = ", x
Input "y = ", y
ergebnis = MultiplizierPositiveZahlen (x, y)
Print "x * y = "; ergebnis
Sleep
End
Function MultiplizierPositiveZahlen (A As Integer, B As Integer) As Integer
If ((A = 0) Or (B = 0)) Then Return 0
If ((A < 0) Or (B < 0)) Then
Print "OMG, das kann ich nicht berechnen!"
Return -1
End If
Dim As Integer zaehler, summe=0
For zaehler = 1 To A
summe = summe + B
Next zaehler
Return summe
End Function
' Jetzt bemerken wir, dass die Function, so wie wir sie implementiert haben,
' eigentlich nicht optimal ist. Wir schreiben das Innenleben neu:
'Function MultiplizierPositiveZahlen (A As Integer, B As Integer) As Integer
' If ((A < 0) Or (B < 0)) Then
' Print "OMG, das kann ich nicht berechnen!"
' Return -1
' End If
' Return A*B
'End Function
' Fuer das Hauptprogramm aendert sich gar nichts. Die Function tut weiterhin
' das gleiche, auch wenn sie intern jetzt anders aussieht.
|
Statt irgendwelche EXE-Dateien über temporäre Dateien miteinander zusammenzuflicken, sollte man lieber Unterprogramme mit abgegrenztem Aufgabengebiet schreiben. Dann kann man ein Unterprogramm leicht überarbeiten, ohne dass dies negative Seiteneffekte auf das restliche Programm hat. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 11.09.2014, 22:59 Titel: |
|
|
Ich habe mein altes QBasic noch einmal ausgegraben und es ausprobiert: Die Inhalte von Variablen bleiben bei CHAIN erhalten, wenn diese (in beiden Modulen) mit COMMON deklariert wurden. Bei RUN wird alles gelöscht.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 11.09.2014, 23:49, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 11.09.2014, 23:53 Titel: |
|
|
@Sebastian:
Entschuldigung, ich habe die erste Fassung etwas voreilig abgeschickt (ist halt schon eine Weile her, seit ich mit QBasic gearbeitet habe).
So, wie es jetzt dort steht, ist es richtig.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 12.09.2014, 14:53 Titel: |
|
|
@ alle: Danke für Eure Mühe!
@ sebastian: Insbesondere für Dein Programmbeispiel!
Also ich muß Euch mal was beichten:
Ich hab noch nie mit subs oder functions gearbeitet! Ich arbeite meistens mit gosub und wenn ich bedingt wo hinspringen will mit goto mit einer Sprungmarke, die ich definiert habe. Mir ist klar, dass das seine Vorteile hat, was Ihr da sagt, aber ich hab' das noch nie gemacht!
Also "chain" ist der Befehl meiner Wahl?! Da hab' ich ein paar Fragen:
- kann ich an einer beliebiger Stelle des aufzurufenden Programms selbiges starten? Und wie mach' ich das?
- wie übergebe ich Variableninhalte?
- und wie krieg' ich die zurück?
- muß ich dann das ganze aufgerufene Prog ausführen?
- merkt sich das aufgrufene Prog, dass es von Außen aufgerufen wurde? Kann ich also zB sagen: Wenn ich von außen aufgrufen worden bin, dann ende an dieser Stelle?
grüsse Nils (ich seh' schon, ich bin fast der Letzte der QB-Fragen hier stellt!) _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 12.09.2014, 17:01 Titel: |
|
|
CHAIN ist ein wirklich altes Relict aus alten QuickBasic Zeiten, um mehr als ein 64 KByte Code + zwei 64KByte Datensegmente nutzen zu können. Dafür werden alle gemeinsam genutzten Variablen mit COMMON bzw. "COMMON SHARED" definiert. Das funktioniert aber nur zwischen 2 QB Programmen.
Viel flexibler ist der Einsatz von Aufrufparametern. Guck dir COMMAND an.
Wenn du viele Werte übergeben willst, dann übergibst du den Pfad zu einer Datei mit den Daten. Die muss dann entspechend eingelesen werden.
Z.b. könnte dein Steuerungsprogramm das in QB geschriebene Programm mit Parametern aufrufen. Das ginge sogar mit einem QB Programm was in einer DOSOX gestartet wird, womit es dann auch auf 64bit Systemen liefe. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 12.09.2014, 19:39 Titel: |
|
|
Den Befehl COMMAND gibt es in QBasic nicht.
Nils hat Folgendes geschrieben: | - kann ich an einer beliebiger Stelle des aufzurufenden Programms selbiges starten? Und wie mach' ich das? | Du kannst in übergebenen Variablen alle Arten von Informationen transportieren.
Programm A: Code: | COMMON sprungmarke$
PRINT "Sprungmarke w„hlen (1-3)"
DO
g$ = INKEY$
LOOP WHILE g$ = ""
SELECT CASE g$
CASE "1"
sprungmarke$ = "marke1"
CASE "2"
sprungmarke$ = "marke2"
CASE "3"
sprungmarke$ = "marke3"
END SELECT
CHAIN "c:\prog_b.bas" |
Programm B: Code: | COMMON sprungmarke$
SELECT CASE sprungmarke$
CASE "marke1"
GOTO marke1
CASE "marke2"
GOTO marke2
CASE "marke3"
GOTO marke3
END SELECT
marke1:
PRINT "Abschnitt1"
CHAIN "c:\prog_a.bas"
marke2:
PRINT "Abschnitt2"
CHAIN "c:\prog_a.bas"
marke3:
PRINT "Abschnitt3"
CHAIN "c:\prog_a.bas" |
Zitat: | - wie übergebe ich Variableninhalte?
| Mit COMMON <Variable>, siehe oben. Zitat: | - und wie krieg' ich die zurück? | Ebenfalls mit COMMON <Variable> Zitat: | - muß ich dann das ganze aufgerufene Prog ausführen?
| Nein, siehe Beispiel Zitat: | - merkt sich das aufgrufene Prog, dass es von Außen aufgerufen wurde? Kann ich also zB sagen: Wenn ich von außen aufgrufen worden bin, dann ende an dieser Stelle? | Auch diese Information kannst du in einer (anderen) COMMON - Variable übergeben und entsprechend auswerten.
Aber wenn das alles sowieso neu für dich ist und du es erst lernen mußt, solltest du wirklich die Gelegenheit nutzen und jetzt auf FB umsteigen. Das Portieren der alten QB-Programme ist wirklich kein Hexenwerk, nur ein bisschen Fleißarbeit.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 12.09.2014, 20:01 Titel: |
|
|
Klar gibt es auch in QB auch eine command$ function. |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 12.09.2014, 20:13 Titel: |
|
|
Zu COMMON sprungmarke$ - QB müsste doch auch ein ON sprungmarkte GOTO ... kennen? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 12.09.2014, 20:24 Titel: |
|
|
@RockTheSchock:
Du meinst wahrscheinlich QuickBasic. Ich habe es zur Sicherheit noch einmal ausprobiert: Wenn ich versuche, von der Konsole aus ein QBasic-Programm zu starten, das die Zeileenthält, bekomme ich die Fehlermeldung "Erweiterte Funktionen nicht verfügbar".
@nemored:
Stimmt. Allerdings steht in der Hilfe auch der Hinweis, daß hierfür CASE...SELECT besser geeignet ist. Ist wohl Geschmackssache.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4637 Wohnort: ~/
|
Verfasst am: 12.09.2014, 20:55 Titel: |
|
|
CASE SELECT in Verbindung mit GOTO halte ich nicht für besser geeignet. Gemeint ist, GOTO komplett zu vermeiden und stattdessen die Inhalte direkt in den CASE-Blöcken einzufügen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1230 Wohnort: Ruhrpott
|
Verfasst am: 12.09.2014, 21:22 Titel: |
|
|
nemored hat Folgendes geschrieben: | Gemeint ist, GOTO komplett zu vermeiden und stattdessen die Inhalte direkt in den CASE-Blöcken einzufügen. | Vermutlich. Aber wenn man das nachträglich in ein existierendes Programm einfügen möchte, geht das mit GOTOs und Sprungmarken wohl einfacher.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 12.09.2014, 21:56 Titel: |
|
|
@grindstone
Du hast Recht mit Command das gibts erst mit QuickBasic. Es gibt dafür einen Workaround mit Call Absolute
Beispiel ist aber nicht von mir
http://www.network54.com/Forum/182035/thread/1019004222/Accessing+command+line+parameters+from+qbasic+1.1
Code: |
DECLARE FUNCTION get.psp% ()
DECLARE FUNCTION commandX$ ()
PRINT "Parameters: " + commandX$
DEFINT A-Z
FUNCTION commandX$
a$ = ""
DEF SEG = get.psp
l = PEEK(&H80)
FOR i = &H81 TO &H81 + l - 1
a$ = a$ + CHR$(PEEK(i))
NEXT i
DEF SEG
commandX$ = a$
END FUNCTION
DEFINT A-Z
FUNCTION get.psp
a$ = MKL$(&HB4E58955) + MKL$(&H8B21CD62) + MKL$(&H1D89067E) + MKL$(&H2CA5D)
DEF SEG = VARSEG(a$)
CALL absolute(s%, SADD(a$))
DEF SEG
get.psp = s%
END FUNCTION
|
Man könnte auch ENVIRON$ verwenden.
Test.bas
Code: |
DECLARE FUNCTION get.psp% ()
DECLARE FUNCTION commandX$ ()
CLS
PRINT "Parameters: " + commandX$
i% = 1
DO
env$ = ENVIRON$(i%)
PRINT env$
i% = i% + 1
LOOP UNTIL env$ = ""
PRINT "ENVIRON A ist gleich "; ENVIRON$("A")
SLEEP
DEFINT A-Z
FUNCTION commandX$
a$ = ""
DEF SEG = get.psp
l = PEEK(&H80)
FOR i = &H81 TO &H81 + l - 1
a$ = a$ + CHR$(PEEK(i))
NEXT i
DEF SEG
commandX$ = a$
END FUNCTION
FUNCTION get.psp
a$ = MKL$(&HB4E58955) + MKL$(&H8B21CD62) + MKL$(&H1D89067E) + MKL$(&H2CA5D)
DEF SEG = VARSEG(a$)
CALL absolute(s%, SADD(a$))
DEF SEG
get.psp = s%
END FUNCTION
|
Man kann die Umgebungsvariablen mit SET setzen. Wenn man von einem Windows Programm die DOSBOX aufruft könnte das in etwa so aussehen (eine Zeile):
"C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe" -c "SET A=B" -c "C:\QB\QBASIC.EXE /RUN C:\QB\Test.bas" -userconf
Ich habe ans Ende der DOSBOX Config einen mount befehl eingefügt sodass mein Verzeichnis mit allen DOS Programmen automatisch als Laufwerk C eingebunden wird.
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.
mount C C:\DOS_C
Wenn du keine DOSBOX einsetzt, sondern das Programm direkt aufrufst kannst du mit Freebasic SETENVIRON verwenden. bzw. mit QBASIC müsste auch ENVIRON "A=B" gehen das gibt aber bei mir einen Speicherfehler. |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2514 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 12.09.2014, 22:52 Titel: |
|
|
Nils hat Folgendes geschrieben: | Also ich muß Euch mal was beichten:
Ich hab noch nie mit subs oder functions gearbeitet! Ich arbeite meistens mit gosub und wenn ich bedingt wo hinspringen will mit goto mit einer Sprungmarke, die ich definiert habe. Mir ist klar, dass das seine Vorteile hat, was Ihr da sagt, aber ich hab' das noch nie gemacht! |
In diesem Fall ein idealer Zeitpunkt für meinen Artikel (Tutorial):
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
RockTheSchock hat Folgendes geschrieben: | CHAIN ist ein wirklich altes Relict aus alten QuickBasic Zeiten, um mehr als ein 64 KByte Code + zwei 64KByte Datensegmente nutzen zu können. Dafür werden alle gemeinsam genutzten Variablen mit COMMON bzw. "COMMON SHARED" definiert. Das funktioniert aber nur zwischen 2 QB Programmen. |
Ein guter Grund, auf FreeBasic zu wechseln, wo bis zu 4 GB Speicher in 32-Bit und beim x64-Compiler (derzeit experimentell) sogar theoretisch mehrere Exabytes (soviel RAM hat nicht einmal der grösste und teuerste Server eingebaut!) linear adressiert werden können. Kurz & bündig: Keine Speichersorgen mehr.
Kleinere Projekte passen bei entsprechender Programmierung aber ebenfalls ins RAM vom DOS-basierten QB hinein, speziell bei Vermeidung von grossen DATA-Zeilenbestände und Code-Wiederholungen. => Ohne CHAIN und COMMON machst Du Dir also das Leben erheblich einfacher.
grindstone hat Folgendes geschrieben: | Ich habe es zur Sicherheit noch einmal ausprobiert: Wenn ich versuche, von der Konsole aus ein QBasic-Programm zu starten, das die Zeileenthält, bekomme ich die Fehlermeldung "Erweiterte Funktionen nicht verfügbar". |
Dies ist der Fall bei der "Lite"-Interpreterversion (QBASIC.EXE), wie sie bei MS-DOS 6.22 mitgeliefert wurde. Beim QB 4.5-Compiler steht COMMAND$ voll zur Verfügung.
@Nils: Am besten einmal das gesamte Projekt etwas genauer beschreiben, so dass für uns ersichtlich wird, ob es tatsächlich einen Grund gibt, bei DOS und damit den Limitierungen des konventionellen Speichers zu bleiben, oder ob das Ganze ebensogut für eine moderne Plattform entwickelt werden kann. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
|