Mit meinen beschiedenen C Kenntnissen versuche ich gerade eine DLL zur Kompression von Strings zu schmieden.
Dies geht auch ganz gut, mit zlib für die Komprimierung habe ich bereits die ersten Tests abgeschlossen, alles geht wie es soll.
Jetzt habe ich bloß ein kleines Problem, wo es darum geht eine DLL drauß zu machen, die auch mit dem GM kompatibel ist.
Nach der Komprimierung eines char Arrays lässt sich das Ergebnis nur als byte Array halten, da dieser auch 0en enthält. Da die Schnittstelle zwischen GM und DLLs nur char Arrays akzeptiert, müsste ich den byte Array casten. Dies gestaltet sich als Problem, da in einem char Array die erste 0, also "\0" als ende, als null-terminator, interpretiert.
Ich habe keinen Ansatz, wie ich das zu Handhaben sollte. Zlib bietet keinerlei Einstellungsmöglichkeiten. Ein Gedanke den ich kurz verfolgt hatte war es, die "\0" mit irgendwas anderem, eindeutigem zu ersetzten, wie zb. drei @@@ Zeichen. Dies könnte meistens funktionieren, ist aber wohl nicht ganz Sinn der Sache - mir gefällt die Lösung einfach nicht.
Falls jemand was zu gucken haben will, hier die compress Funktion.
Andere weitere Möglichkeit, die ich ganz bestimmt nicht toll finde, ist es, das komprimierte Ergebnis in eine temporäre Datei zu schreiben, und dann nur den Pfad zu übergeben. Der GM könnte diese Datei dann wieder einlesen. Toll finde ich das aus dem Grund nicht, dass es ein vielfaches langsamer ist, als es direkt zu übergeben.
Ich benutze die zlib1.dll, die ich mir selber compiliert habe. Kann also folglich selber dort etwas ändern. So wie ich es allerdings sehe, führt das Probklem ganz auf den Kern zurück, auf den LZ77 algo zurück.
Hoffe auf Hilfe
MfG SDX
Dies geht auch ganz gut, mit zlib für die Komprimierung habe ich bereits die ersten Tests abgeschlossen, alles geht wie es soll.
Jetzt habe ich bloß ein kleines Problem, wo es darum geht eine DLL drauß zu machen, die auch mit dem GM kompatibel ist.
Nach der Komprimierung eines char Arrays lässt sich das Ergebnis nur als byte Array halten, da dieser auch 0en enthält. Da die Schnittstelle zwischen GM und DLLs nur char Arrays akzeptiert, müsste ich den byte Array casten. Dies gestaltet sich als Problem, da in einem char Array die erste 0, also "\0" als ende, als null-terminator, interpretiert.
Ich habe keinen Ansatz, wie ich das zu Handhaben sollte. Zlib bietet keinerlei Einstellungsmöglichkeiten. Ein Gedanke den ich kurz verfolgt hatte war es, die "\0" mit irgendwas anderem, eindeutigem zu ersetzten, wie zb. drei @@@ Zeichen. Dies könnte meistens funktionieren, ist aber wohl nicht ganz Sinn der Sache - mir gefällt die Lösung einfach nicht.
Falls jemand was zu gucken haben will, hier die compress Funktion.
Andere weitere Möglichkeit, die ich ganz bestimmt nicht toll finde, ist es, das komprimierte Ergebnis in eine temporäre Datei zu schreiben, und dann nur den Pfad zu übergeben. Der GM könnte diese Datei dann wieder einlesen. Toll finde ich das aus dem Grund nicht, dass es ein vielfaches langsamer ist, als es direkt zu übergeben.
Ich benutze die zlib1.dll, die ich mir selber compiliert habe. Kann also folglich selber dort etwas ändern. So wie ich es allerdings sehe, führt das Probklem ganz auf den Kern zurück, auf den LZ77 algo zurück.
Hoffe auf Hilfe
MfG SDX