Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

LZW_Decode/Encode

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OrangeTiger



Anmeldungsdatum: 21.02.2008
Beiträge: 17

BeitragVerfasst am: 31.03.2008, 18:52    Titel: LZW_Decode/Encode Antworten mit Zitat

Hallo,
Ich hab mal 2 Subs geschrieben...

Code:
Declare Function LZW_Encode Alias "fb_hEncode" ( _
   ByVal in_buffer  As Any Ptr, _
   ByVal in_size    As Integer, _
   ByVal out_buffer As Any Ptr, _
   ByRef out_size  As Integer _
   ) As Integer

Declare Function LZW_Decode Alias "fb_hDecode" ( _
   ByVal in_buffer  As Any Ptr, _
   ByVal in_size    As Integer, _
   ByVal out_buffer As ANY Ptr, _
   ByRef out_size  As Integer _
   ) As Integer


Dim Shared dest_size As Integer
Dim Shared src_size As Integer
Dim Shared i As Integer
Dim Shared LastBack As Integer
Dim Shared dest_buffer(100000) As UByte
Dim Shared src_buffer(100000) As Ubyte
Dim Shared Endung As String
Dim Shared Pfad As String
Dim Shared Dateiname As String

Sub Decompress(Datei As String)
    For i = 1 To Len(Datei)
        If Mid(Datei, i, 1) = "\" Then LastBack = i
    Next i
    For i = LastBack + 1 To Instr(Datei, ".") - 1
        'DateiName = DateiName + Mid(Datei, i, 1)
    Next i
    For i = 1 To LastBack
        Pfad = Pfad + Mid(Datei, i, 1)
    Next i
    dest_size = 0
    Open Datei For Binary As #1
        Get #1 , , Endung
        While Not Eof(1)
            Get #1 , , dest_buffer(dest_size)
            dest_size += 1
        Wend
    Close #1
    src_size = 100000
    LZW_Decode (@dest_buffer(0), dest_size, @src_buffer(0), src_size)
    Open Pfad & DateiName & "." & Endung For Binary As #1
        For i = 0 To src_size -1
            Put #1,, src_buffer(i)
        Next i
    Close #1
    Kill Datei
    End
End Sub

Sub Compress(Datei As String)
    For i = 1 To Len(Datei)
        If Mid(Datei, i, 1) = "\" Then LastBack = i
    Next i
    For i = LastBack + 1 To Instr(Datei, ".") - 1
        DateiName = DateiName + Mid(Datei, i, 1)
    Next i
    For i = 1 To LastBack
        Pfad = Pfad + Mid(Datei, i, 1)
    Next i
    src_size = 0
    Open Datei For Binary AS #1
        While Not Eof(1)
            GET #1,, src_buffer(src_size)
            src_size += 1
        Wend
    Close #1
    dest_size = 100000
    LZW_Encode (@src_buffer(0), src_size, @dest_buffer(0), dest_size)
    Open Pfad & DateiName & ".img" For Binary As #1
        Put #1,, Endung
        For i = 0 To dest_size - 1
            Put #1,, dest_buffer(i)
        Next i
    Close #1
    Kill Datei
    End
End Sub


Wie man auch an den Namen der beiden Subs unschwer erkennen kann sollen die Subs die übergebene Datei kompremieren/dekompremieren... aber aus irgend einem Grund gibt mir FB beim testen zwei sehr merkwürdige fehlermeldung wieder:

F:\FBIDETEMP.o:fake:(.text+0x184): undefined reference to `fb_hDecode@16'
F:\FBIDETEMP.o:fake:(.text+0x42d): undefined reference to `fb_hEncode@16'

Was ich schon rausgefunden habe ist, dass diese Fehler bei dem Aufruf der beiden Functions
Code:
LZW_Decode (@dest_buffer(0), dest_size, @src_buffer(0), src_size)
LZW_Encode (@src_buffer(0), src_size, @dest_buffer(0), dest_size)

entstehen. Weil wenn ich die beiden Aufrufe als Kommentar markiere funktionier alles... Aber wodran kann das liegen?

Mfg OrangeTiger
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 31.03.2008, 20:02    Titel: Antworten mit Zitat

Schreib am Anfang "Screen 1" hin.
Noch VOR dem Declare.

Edit:
Oder man spielt mit der Kommandozeile herum zwinkern :
Code:
fbc deinedatei.bas -l fbgfx
Das erspart das lästige Grafikfenster, das man eh nicht braucht, zwar verstecken kann, aber dadurch muss man nur noch mehr tippen durchgeknallt .
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz