... zusätzlich noch CreateFile() anstelle von OpenFile() verwenden und auch
dessen Rückgabewert auswerten. Anstelle der 0 als Ausgabekanal ein
#PB_Any zu verwenden ist sicherlich auch nicht verkehrt.
(behebt zwar nicht das aktuelle IMA-Problem, beugt aber dem nächsten
oder übernächsten Problem vor )
Ist das so wohl richtig?
Zur zeit läuft der Code wunderprächtig. Ich habe den eindruck das der Code bockt wenn ich mehrere Programme(Explorer etc.) gleichzeitig auf habe.
Aber sowas kann doch keine Kiste mit nem Gigabyte RAM aus der ruhe bringen.
If mapsichern$ <> ""
HideWindow(#Fenster_Progress,0)
SelectElement(lang(),28)
SetGadgetText(fptext,lang())
*MemoryID = AllocateMemory((xk*2+2)*yk)
If *MemoryID
Else
Debug "Sichern: Konnte den angeforderten Speicher nicht reservieren!"
EndIf
z.l=*MemoryID
For b.w=1 To yk ;b = Zeile
For c.w=1 To xk ;c = Spalte
bs=feld((b-1)*xk+c)
If bs="":bs="00":EndIf
PokeS(z,bs):z+2
Next c
PokeS(z,Chr(13)):z+1
PokeS(z,Chr(10)):z+1
Next b
Debug("Z ist "+Str(z))
mapsi=CreateFile(#PB_Any,mapsichern$)
If mapsi
Else
MessageRequester("Information","Konnte Datei nicht erstellen!")
EndIf
WriteData(mapsi,*MemoryID,(xk*2+2)*yk)
FreeMemory(*MemoryID)
CloseFile(mapsi)
DateiName$ = GetFilePart(mapsichern$)
SetWindowTitle(0, "MDV Mapedit Lite - "+ DateiName$+" "+ Str(xk)+"*"+Str(yk))
HideWindow(#Fenster_Progress,1)
Else
MessageRequester("Fehler!","Keine Gültige Datei gewählt.",#PB_MessageRequester_Ok)
EndIf ;mapsichern$ <> ""
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
Es wird ja immer geraten zu prüfen, ob der Speicherbereich wirklich allokiert werden konnte.
Mich würde mal interessieren, ob es überhaupt bei "normalen" Buffern im allgemeinen Gebrauch von sagen wir mal 4kb oder ähnlichem passieren kann, dass kein Speicher allokiert werden kann. Soweit ich weiss schaufelt Windows doch was frei auf die Festplatte, wenns benötigt wird.
Sagen wir so, ich habe teilweise Codestellen in denen Speicher einfach allokiert werden MUSS, sonst geht das gesamte Folgeprogramm den Bach runter (bzw wird nutzlos/fehlerhaft/o.Ä.). Und wenn der kleine Bereich physisch nicht mehr hergegeben kann steht Windows theoretisch doch schon mit einem Schritt im nächsten Leben.
Kann ich mich dabei darauf verlassen (wie gesagt bei kleinen Buffern), dass der Speicher allokiert wird, oder gibts noch mehr Faktoren als die RAM Größe die das beeinflussen?
bzgl. des IMA kann ich nicht sagen, ob sich durch Deine Veränderungen was verbessert hat.
Allerdings bringt es wenig, wenn Du beispielsweise die Datei nicht erstellen
kannst, den Benutzer darüber zu informieren, Du aber dennoch versuchst
dort hineinzuschreiben.
mapsi=CreateFile(#PB_Any,mapsichern$)
If mapsi
Else
MessageRequester("Information","Konnte Datei nicht erstellen!")
EndIf
WriteData(mapsi,*MemoryID,(xk*2+2)*yk)