Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 07.10.2004, 11:30 Titel: Fehlermeldung "String space corrupt in line0 of modul.. |
|
|
Hallo,
weiß jemand was die Ursache dafür ist, wenn die EXE meines qb71-programms immer an der gleichen Stelle die Fehlermeldung "String space corrupt" ausgibt und das Programm beendet wird? Und wie kann ich das verhindern?
Danke fürs Interesse |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 07.10.2004, 15:02 Titel: String Space |
|
|
Hallo.
Ich vermute mal folgende Ursachen:
Es ist zu wenig Speicher eingestellt. Unter Eigenschaften -> Speicher alles auf automatisch einstellen oder den höchsten möglichen Wert nehmen.
Startest du QB mit /Ah? Wenn ja, lass es mal weg; wenn nein, probiers mal.
Ungenaue Diagnose: Ich schätze die Meldung wird angezeigt, weil zu wenig (funktionierender) Speicher zur Verfügung steht.
Woran das liegen könnte siehe oben.
Du könntest aber auch mal probieren, QB 4.5 zu nehmen.
Hast du große Arrays in deinem Programm und kannst du mal die Codestelle posten, bei der es zu dem Fehler kommt?
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 08.10.2004, 13:50 Titel: Zu viel rumgefritzelt |
|
|
Also diese Fehlermeldung heißt im deutschen QB ja "Zeichenkettenbereich beschädigt"..
Aber ich würde nicht sagen, dass es ein Problem des zur Verfügung stehenden Speichers ist, sondern dass du vielleicht irgendwo mit irgendwelchen Befehlen (POKE oder so) in den Speicher "reinkritzelst" - und das passt QB nicht. Fallst du mit POKE arbeitest, würde ich erstmal einen Dummystring mit irgendwelchen Zeichen füllen und dann das Segment setzen;
Code: | dummy$ = STRING$(10000,0)
DEF SEG = VARSEG(dummy$)
addr = VARPTR(dummy$) ' oder versuche auch mal addr = SADD(dummy$)
pos = 0 '1. Zeichen im String
POKE (addr+pos), CHR$(XY)
DEF SEG |
_________________
|
|
Nach oben |
|
|
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 08.10.2004, 18:38 Titel: |
|
|
Also die Fehler 14 (Out of string space) oder 7 (out of memory) im kompilierten Quellcode treten immer bei VB-Script-Aufrufen mit SHELL auf.
Allerdings nur unter Windows 98, unter XP läuft mein Programm.
Muss also irgendwie mit dem Speicher zu tun haben, der für Dos-Anwendungen bereit gestellt wird. Aber weshalb dieser bei 98 anscheinend kleiner? Und welcher Speicher ist da überhaupt, der diese Fehlermeldungen verursacht und wo kann ich sehen, wieviel mir davon zur Verfügung steht? |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 08.10.2004, 18:55 Titel: WinXP ist flexibler |
|
|
Achso, du rufst weitere Programme auf... dann ist die Sache klar; meines Wissens nach hat XP ein besseres Speichermanagment als Win98, denn ein fettes Windows-Programm aufzurufen ist manchmal ein bisschen zu viel für QB... "out of memory" ...ich weiß ja nicht wieviel RAM du in deiner Kiste hast, aber wenn du einen überblick über den für QB vorgesehenen Speicher haben willst, dann geh auf deine QB.EXE, mit der rechten Maustaste auf "Eigenschaften" und dann gehste auf die Registerkarte "Speicher". Dort kannst du ja mal checken, ob alle Speichereinstellungen stimmen. _________________
|
|
Nach oben |
|
|
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 09.10.2004, 11:06 Titel: |
|
|
Hallo und danke zunächst mal für eure Ratschläge!
Ich habe die Ursache des Problems jetzt gefunden, allerdings hab ich noch keine Ahnung wie ich das Problem umgehen kann.
Windows 98 stellt nur 577 KB konventionellen DOS-Speicher zur Verfügung, Windows XP dagegen 613 KB! Und genau diese fehlenden 36 KB lassen meine EXE unter 98 "out of memory" oder "out of string space" laufen und zwar immer genau dann, wenn sie ein VB-Script aufruft, da das ebenfalls zusätzlichen konventionellen Speicher belegt.
Meine Frage:
Wie kann ich erreichen, dass mein Programm weniger konventionellen Speicher (also mindesten 36 Kb weniger) benötigt, damit auch die Script-Aufrufe unter Windows 98 noch klappen?
Das Programm besteht aus 5 Modulen mit je einigen Subs. Verkleinern ist nicht mehr möglich.
Hatte mir überlegt, anstelle die VB-Scripts mit SHELL aufzurufen, könnte man mit RUN arbeiten, damit das Prog vorher komplett aus dem Speicher entfernt wird. Allerdings müsste im Anschluss das Programm an der Ausstiegsstelle weiterlaufen und sämtliche Programmvariablen (und das sind viele) wären dann ja auch gelöscht |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 09.10.2004, 12:03 Titel: Lösungen |
|
|
Hallo.
Du könntest vor dem Scriptaufruf sämtliche weiter benötigten Variablen in eine Datei schreiben, dann alles löschen (auf welchem Weg auch immer) und dann das VB-Script aufrufen. Anschließend könntest du die Variablen wieder einlesen.
Weiterhin könntest du Variablen o.ä. grundsätzlich in Dateien auslagern. Wenn du lange Strings hast oder so kannst du die ja versuchen in Dateien zu speichern.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 09.10.2004, 14:04 Titel: Zerhechseln |
|
|
Wie meinst du das mit "5 module" ? Also wenn du dein Programm in Includes oder Libs zerschnippelt hast, bringt dir das auch keinen zusätzlichen Speicher, eher noch weniger. Mit RUN kannst du keine EXE-Dateien aufrufen, das geht nur mit BAS-Dateien. Und Variablen löschen bringt auch nicht viel, weil die Variablen innerhalb des Für QB-Reservierten speichers sind, und da kann/darf eh kein anderes Programm hinschreiben. Ich schlage vor du machst aus deinem Programm mehrere BAS-Dateien und Kompilierst sie. Dann kannst du bestimmte Sachen einfach mit SHELL aufrufen. Bestimmte Variablen könntest du mit COMMAND$ übergeben oder in eine gemeinsame Datei schreiben. _________________
|
|
Nach oben |
|
|
|