Seite 1 von 1
WinApi Aufruf CharToOem bringt programm zu Absturz
Verfasst: 23.09.2015 21:11
von Vi-P
Hallo zusammen,
habe mein Problem auf eine überschaubare Menge an Code reduziert:
Code: Alles auswählen
Procedure test ()
q.s = "test äöüÄÖÜß"
z.s = " "
CharToOem_ (q, z)
Debug q
Debug z
EndProcedure
test ()
Dieses Programm kann ich mit PB 4.61 unter XP in der IDE beliebig ausführen. Kein Problem. Unter 5.23 LTS und Windows 7 erhalte ich beim Ausführen nicht immer, aber sehr oft einen "invalid memory access" Fehler. Unicode ist in beiden Fällen aus. Ohne die Umlaute passiert anscheinend nichts. Wird das Programm ohne Prozedur geschrieben, also CharToOem_ () im Hauptprogramm, gibt es ebenfalls keine Fehler. Die Debug Befehle wegzulassen, hilft auch nicht.
Kennt jemand den Effekt? Habe ich etwas übersehen oder falsch gemacht? Sollte ich die Autoren damit nerven?
Edit by NicTheQuick: Code-Tags gesetzt
Re: WinApi Aufruf CharToOem bringt programm zu Absturz
Verfasst: 23.09.2015 21:25
von ts-soft
Der zweite Buffer muß genauso groß sein, wie der erste Buffer, bei ANSI, bei Unicode sogar größer. Du schreibst aber in einen nicht initialsierten Buffer (1 Byte größe).
Dein Code sollte also so aussehen:
Code: Alles auswählen
Procedure test ()
q.s = "test äöüÄÖÜß"
Debug q
CharToOem_ (q, q)
Debug q
EndProcedure
test()
So geht es natürlich auch:
Code: Alles auswählen
Procedure test ()
Protected q.s = "test äöüÄÖÜß"
Protected z.s = Space(12) ; oder " "
CharToOem_ (q, z)
Debug q
Debug z
EndProcedure
test()
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
Re: WinApi Aufruf CharToOem bringt programm zu Absturz
Verfasst: 24.09.2015 01:59
von Vi-P
Herzlichen Dank ts-soft,
ist (eigentlich) logisch, was Du sagst und die ersten Tests waren auch erfolgreich. Da einem in PB im "Normalfall" die ganze lästige Arbeit, die man z.B. in C mit Strings hat, abgenommen wird, kann es (wie hier) leicht passieren, daß man annimmt, daß sich dies bei winapi Aufrufen genauso verhält. Dabei ist das ja was externes, was von PB an den Programmierer nur "as is" weitergereicht wird...
Sollten die Entwickler das hier lesen: Wäre hilfreich in der Hilfe ein (kurzes) Kapitel Winapi zu finden, wo zum einen verraten wird, wo man die Info´s (verfügbare Funktionen) zur winapi findet und eben solche Dinge.
Re: WinApi Aufruf CharToOem bringt programm zu Absturz
Verfasst: 24.09.2015 10:37
von ts-soft
Zum Testen kannst Du in den CompilerOptionen den Purifier anschalten! Leider funktioniert
der nicht so richtig mit der aktuellen Beta von 5.40, aber unter allen anderen Versionen sollte
der Funktionieren.
Nach dem Testen aber unbedingt wieder ausschalten, der benötigt nämlich ziemlich viel Zeit!