PureBasic Data

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • Hi,
    wollte eine kleine Datei anstatt sie beim Start von der HDD einzulesen, direkt im Quellcode einbetten, um sie dann zur Laufzeit in den Speicher zu laden.


    Die Funktionen Data / DataSection / EndDataSection scheinen mir hierfür geeignet. (Gibt zwar noch andere Ansätze, spielt aber jetzt keine Rolle)


    Komischerweise stürzt der Compiler ab einer bestimmten Anzahl Bytes (mehr als 40000) ab.
    Die Frage ist:
    Wende ich das falsch an? Ist eine Bytegrenze gewollt? Habe ich einen Bug entdeckt?
    Mein kleines TestProg zeigt was gemeint ist. Sobald ich eine weitere Data Zeile hinzunehme, crasht der Compiler.


    data_test.pb.zip das gleiche nochmal als Anhang. Da sind schon alle Data-Zeilen fertig (testet sich leichter)
    hier im Codefenster gehen nur max. 10.000 Zeichen.

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Ich will jetzt gar nicht Wissen, wieso als String und wieso als Datazeile, weil das macht man sowieso anders!
    DataSection und EndDataSection ist schon mal richtig. Da kommt dann IncludeBinary:

    ;-)

  • Vielen Dank - sowas hab ich gesucht. Funktioniert.
    Die Quelldatei muß nur noch zum Zeitpunkt des kompilieren vorliegen.


    Auf diese Funktion mußte aber erstmal kommen (wenn man nicht weiß, das sie existiert). Ein Link dahin, aus dem Data-Kapitel hätte geholfen ;-)

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Ich will jetzt gar nicht Wissen, wieso als String und wieso als Datazeile

    ich möchte es aber trotzdem verraten :-)


    Datazeile deshalb, weil es sich ja auch um Daten handelt und nicht um Bestandteil des Codes.
    Hätte das auch als normale stringzuweisungen in stringvariablen je 8000 Zeichen stopfen können und diese dann zur Laufzeit verarbeiten und in den Speicher als Sound zusammenbauen können.


    Also anstatt Data.s "...." einfach block1$ = "..." usw.


    Aber dann hätte ich:
    1x die Daten im Quellcode
    1x die Daten in der Stringvariable
    1x die Daten als ursprünglicher, zusammenhängender Binärblock
    1x die Daten als geladener Sound
    im Speicher


    Ok - die Strings und den Binärblock hätte anschließend wieder freigeben können. Fand die Idee mit Data aber trotzdem gut und ist bestimmt auch schneller.



    String deshalb, weil ich die Bytewerte der .wav Datei als Hex Schreibweise (immer 2 Zeichen pro Wert) im Code ablegen wollte.
    Also die 2-er Hexcodes als 8000 Zeichen langen String zusammenkleben (ohne Trennzeichen).
    Das hat mir die zig-tausend Kommas erspart, weil ich ja die Hexcodes immer schön in einer Schleife nacheinander (immer 2 Zeichen) in ursprüngliche Bytewerte wandeln und in den Speicher schreiben kann.



    Aber mal von all dem abgesehen - warum crasht aber der Compiler bei über 40.000 Zeichen im DataSection Block? Von der Syntax her, habe ich das ja korrekt angewendet. Deshalb der Verdacht, das ich vllt. einen Fehler aufgedeckt haben könnte.

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Schon mal von gehört, das Strings in PB nullterminiert sind, bzw. in Unicode doppelnullterminiert. Desweiteren, liest er direkt (normal als UTF-8) aus dem Text, also sind Steuercodes etwas problematisch. Die Umwandlung von UTF-8 (Source-Datei) nach Unicode (Memory) erfolgt "on the fly".


    PS: So bekommt Du nie

    1x die Daten als ursprünglicher, zusammenhängender Binärblock
    1x die Daten als geladener Sound

    Das geht nur mit z.B. byte, long, quad


    PSS: Wenn etwas unverändert in den Source eingefügt wird, dann gehört das zu den CompilerDirektiven.

  • OK - die passende Funktion dazu kenn ich ja jetzt. Wenn der Compiler nicht gecrasht wär, hätte ich wohl noch etliche Tage daran rumgefrickelt ;-)
    Ich bastel dann mal weiter...

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint