Ich bin mit meinem Latein irgendwie grad am Ende.
Ich versuche gerade ein Base64 zu basteln das immer das gleiche raushaut, egal ob von ASCII oder Unicode Kompilat.
Ich Alloziiere einen Speicherbereich, prüfe ob er gültig ist, und wenn ich ihn freigeben will, meint der Compiler : MemoryID ungültig.
Allerdings nicht immer, es scheint mit der Länge des übergebenen Strings bzw. dessen Output zusammenzuhängen...
Hier mal die Prozeduren...
Code: Alles auswählen
Procedure.s mToBase64(String.s)
Protected *Input
Protected *OutPut
Protected InputSize = StringByteLength(String,#PB_Ascii)
Protected OutPutSize = InputSize + (InputSize / 2)
Protected Result.s = ""
If Len(String) >= 1
If OutPutSize < 64 : OutPutSize = 64 : EndIf
*Input = AllocateMemory(InputSize)
*OutPut = AllocateMemory(OutPutSize)
If *Input And *OutPut
PokeS(*Input, String, -1, #PB_Ascii)
Bytes = Base64Encoder(*Input, InputSize, *OutPut, OutPutSize)
If Bytes
Result = PeekS(*OutPut, -1, #PB_Ascii)
EndIf
FreeMemory(*Input)
FreeMemory(*OutPut) ; <-- Memory ID ungültig ?????
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure.s mFromBase64(String.s)
Protected *Input
Protected *OutPut
Protected InputSize = StringByteLength(String,#PB_Ascii)
Protected OutPutSize = InputSize
Protected Result.s = ""
If Len(String) >= 1
If OutPutSize < 64 : OutPutSize = 64 : EndIf
*Input = AllocateMemory(InputSize)
*OutPut = AllocateMemory(OutPutSize) ; <-- Speicher Alloziiert
If *Input And *OutPut ; <-- Abfrage ob gültig
PokeS(*Input, String, -1, #PB_Ascii)
Bytes = Base64Decoder(*Input, InputSize, *OutPut, OutPutSize)
If Bytes
Result = PeekS(*OutPut, -1, #PB_Ascii)
EndIf
Debug *Output
Debug OutPutSize
FreeMemory(*Input)
FreeMemory(*OutPut) ; <-- Memory ID ungültig ?????
EndIf
EndIf
ProcedureReturn Result
EndProcedure
e.s = mToBase64("Größte Sprüche gehören verboten ! Das sollte aber nun ") ; <-- Dieser String verursacht MemID Error
d.s = mFromBase64(e)
; e.s = mToBase64("Größte Sprüche gehören verboten ! Das sollte aber nun nicht davon abhalten") ; <-- Dieser nicht
; d.s = mFromBase64(e)
Debug e
Debug d
Aber PB scheint nicht diese Meinung bei dem obigen Geschreibsel zu teilen. Was hab ich da also verissen ?
Edit: Unicode oder ASCII Kompilat ... es kommt bei beiden zu dem Problem.