Fehlermeldung: fpc_shortstr_to_ansistr[gelöst] (32)

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Fehlermeldung: fpc_shortstr_to_ansistr[gelöst] (32)

Beitragvon haderlump » 5. Jan 2019, 17:32 Fehlermeldung: fpc_shortstr_to_ansistr[gelöst] (32)

hallo zusammen
Ich bin recht am verzweifeln. Haus heiterem Himmel kommt eine Exception.
wenn ich dann draufklicke erscheint das Assemblerfenster und die Funktion fpc_shortstr_to_ansistr (32),
ist also wohl irgend eine Typumwandlung.
Leider gibt es keine Programmzeilennummer dazu . wie könnte ein pascal-befehl ausschauen, der diese Funktion aufruft ?

Gruß Fritz
Zuletzt geändert von haderlump am 8. Feb 2019, 19:57, insgesamt 1-mal geändert.
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon af0815 » 5. Jan 2019, 21:26 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Zeigt der Stacktrace nichts ? Bzw. das Stackfenster ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3632
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon haderlump » 7. Jan 2019, 04:14 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Hallo af0815
Stacktrace, Stackfenster Ist das der Aufrufstack? Gut da schau ich dann beim nächsten mal nach!
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon compmgmt » 8. Jan 2019, 19:40 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Hast du vielleicht ausversehen die {$H+} Zeile gelöscht?
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon haderlump » 15. Jan 2019, 06:21 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Der Aufrufstack gibt leider auch nichts her, meistens unverständliche Adressbezeichnungen.
compmgmt:
Ich hatte bei einer Unit wohl die besagte Zeile gelöscht, oder auch nicht? war auf jeden Fall nicht vorhanden.
Ich habe sie aber nachgetragen.
Die Fehler sind jetzt aber seltener.
Was ist eigentlich der Unterschied zwischen Short- und Ansistring. Vielleicht kann ich dieser Wandlung aus dem Weg gehen?
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon fliegermichl » 15. Jan 2019, 12:48 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Shortstrings wurden in Turbo Pascal verwendet. Sie belegen immer 256 Bytes Speicherplatz. Im ersten Byte ist die Länge des Strings gespeichert. Nutzbare Stringlänge ist somit maximal 255 Zeichen.
AnsiStrings sind als Zeiger auf einen Speicherbereich definiert.

Sie belegen soviel Speicher wie man entweder mit SetLength festgelegt hat oder durch Angabe eines Literals wird das vom Compiler erledigt.
Zusätzlich belegen AnsiStrings 4 weitere Bytes die vor dem Beginn der eigentlichen Nutzdaten gespeichert werden und die aktuelle Länge des Strings beinhalten.

Die maximale Größe der Nutzdaten ist ca. 4 Gigabyte.

Die wurden soweit ich mich erinnere mit Delphi 2 eingeführt.
Als normaler Anwendungsprogrammierer merkt man den Unterschied erst mal gar nicht sonderlich weil der Compiler die Speicherverwaltung der Strings automatisch erledigt.

Shortstrings haben den Vorteil, daß man sie in records verwenden kann und mit Read und Write File of record direkt lesen und schreiben kann. Das geht mit Ansistrings nicht weil sie ja eigentlich Zeiger sind.
Vorteil ist natürlich aber, daß sie nur soviel Speicher verbrauchen wie nötig und wesentlich größere Zeichenmengen aufnehmen können.
fliegermichl
 
Beiträge: 312
Registriert: 9. Jun 2011, 08:42

Beitragvon haderlump » 20. Jan 2019, 06:14 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Hallo
wenn ich das richtig verstanden habe, weist {$H+} den compiler an ansi-strings zu verwenden.
Ich habe in meinem Programm ja nur kurze strings. Da würde Shortstring locker reichen.
Wenn ich {$H+} weglassen würde ginge dann trotzdem alles, oder werden die Ansi-Strings woanders gebraucht?

Mein Fehler tritt ja nur selten auf, und ich komme nicht dahinter, bei welcher Gelegenheit.

Es ist zum Haare raufen.
Ein Folgeproblem ist ja, dass da Züge fahren, und die machen bei einem Programmabsturz was sie wollen. Fahren also einfach weiter. Die Gleisbelegung und alles andre wird ja auch nicht mehr aktualisiert.
So genug gejammert!!!

Grß Fritz
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon compmgmt » 20. Jan 2019, 18:10 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Theoretisch ja, ist aber unnötig. Nutz lieber direkt AnsiStrings. Hier mal ein Überblick über sämtliche Stringtypen: http://wiki.freepascal.org/Character_and_string_types/de#ShortString
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon haderlump » 21. Jan 2019, 05:41 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

In der Doku, auf die du verwiesen hast steht als typ ansistring. Das meinte ich dass ich dies Deklarationen umändere.
Da Ansistrings ja Zeiger sind, muss ich aber dann auch meine Records und Arrays abändern, oder passiert das automatisch wenn ich die Typen in ansistring ändere?
Und wenn ich Inhalte von Ansistrings auf Platte speichere muss ich dies ja dereferenzieren ?
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon compmgmt » 21. Jan 2019, 05:48 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Nein da musst du nichts ändern. Das ist ja das schöne an den Pascal-Strings, dass sie alle gemanaged sind.

Das müsstest du nur bei PAnsiChar, PWideChar u.ä. machen.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)
compmgmt
 
Beiträge: 351
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon fliegermichl » 21. Jan 2019, 08:40 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

compmgmt hat geschrieben:Nein da musst du nichts ändern. Das ist ja das schöne an den Pascal-Strings, dass sie alle gemanaged sind.

Das müsstest du nur bei PAnsiChar, PWideChar u.ä. machen.


Das stimmt nur zum Teil. Wenn du die records in Dateien vom Typ file of xyrecord schreiben/lesen willst, dann geht das mit Ansistrings nicht.

Die Option {$H+} wirkt sich nur auf Strings aus die mit var xy : string; deklariert sind.
Wenn du var xy : Ansistring; oder var xy : Shortstring; deklarierst, hat der Switch keine Wirkung.
fliegermichl
 
Beiträge: 312
Registriert: 9. Jun 2011, 08:42

Beitragvon haderlump » 30. Jan 2019, 19:27 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Damit müssten ja alle string-Variablen im Programm automatisch Ansistrings sein.
Mal sehen.
ich kämpfe momentan allerdings auf einer anderen Baustelle.
Ich komme aber darauf zurück.

Gruß Fritz
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon fliegermichl » 31. Jan 2019, 09:01 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

haderlump hat geschrieben:Damit müssten ja alle string-Variablen im Programm automatisch Ansistrings sein.


Bei {$H+} sind alle Stringvariablen die einfach nur als string deklariert sind automatisch Ansistrings. Bei {$H-} sind sie automatisch ShortStrings.
Nur wenn sie explizit als Shortstring oder Ansistring delariert sind, hat für diese Variablen die Einstellung von {$H+/-} keine Bedeutung.
fliegermichl
 
Beiträge: 312
Registriert: 9. Jun 2011, 08:42

Beitragvon haderlump » 1. Feb 2019, 10:57 Re: Fehlermeldung: fpc_shortstr_to_ansistr (32)

Ich habe in allen meinem Modulen die {$H+} option eingetragen. Normalerweise gäbe es da nichts mehr zu wandeln.Trotzdem taucht die Fehlermeldung immer wieder mal auf.
Eigentlich würde mir shortstring überall reichen.
Wäre vieleicht die Option {$H-} die bessere Wahl, so dass die Umwandlung überflüssig wäre.

Ich kann auch nicht feststellen, von wo aus die Wandlung aufgerufen wurde. Der Aufrufstack liefert nichts verwerbares.
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon haderlump » 8. Feb 2019, 19:58 Re: Fehlermeldung: fpc_shortstr_to_ansistr[gelöst] (32)

Wie es scheint, ist das problem gelöst. Wenigstens trat der fehler nicht mehr auf.
haderlump
 
Beiträge: 157
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried