| |
|
|
 Frank Abbing | Daten packen sin Dll, sólo mittels API.
================================================================================
================================================================================/
Daten packen/entpacken sin Dll, sólo mittels API.
© 2008 Franco Abbing, http://frabbing.de
Def RtlCompressBuffer(8) !"ntdll.dll", "RtlCompressBuffer"
Def RtlDecompressBuffer(6) !"ntdll.dll", "RtlDecompressBuffer"
Def RtlGetCompressionWorkSpaceSize(3) !"ntdll.dll", "RtlGetCompressionWorkSpaceSize"
Def RtlMoveMemory(3) !"kernel32.dll", "RtlMoveMemory"
Speicherbereich packen. Parámetro: (Speicherbereich, Anzahl Bytes en el Speicherbereich)
Proc CompressBuffer
Parámetros bbereich#, cbx&
Declarar cstatus&, bworkspacesize&, fworkspacesize&, cbereich#, workspace#
cstatus&=0
Caso negativo RtlGetCompressionWorkSpaceSize(2, Addr(bworkspacesize&), Addr(fworkspacesize&))
Dim workspace#,bworkspacesize&
Dim cbereich#,cbx&+400
Caso negativo RtlCompressBuffer(2,bbereich#,cbx&,cbereich#,cbx&+400,0,Addr(bworkspacesize&),workspace#)
Claro bbereich#
Largo bbereich#,0=cbx&
RtlMoveMemory(bbereich#+4,cbereich#,bworkspacesize&)
cstatus&=bworkspacesize&+4
EndIf
Disponer workspace#
Disponer cbereich#
Endif
Volver cstatus&
Rückgabe: Anzahl el gepackten Bytes. El gepackten Daten fueron en el übergebenen Speicherbereich kopiert.
ENDPROC
Originale Speichergrösse ermitteln. Parámetro: (gepackter Speicherbereich#)
Proc GetDecompressSize
Parámetros bbereich#
Volver Largo(bbereich#,0)
ENDPROC
Speicherbereich entpacken. Parámetro: (gepackter Speicherbereich, Anzahl Bytes en el gepackten Speicherbereich, freier Speicherbereich)
Proc DecompressBuffer
Parámetros bbereich#, cbx&, cbereich#
Declarar bworkspacesize&
Caso negativo RtlDecompressBuffer(2,cbereich#,Largo(bbereich#,0),bbereich#+4,cbx&-4,Addr(bworkspacesize&))
Volver bworkspacesize&
EndIf
Volver 0
Rückgabe: Anzahl el entgepackten Bytes.
ENDPROC
================================================================================
================================================================================/
====> HAUPTPROGRAMM
Declarar bereich#, bereich2#, texto$, x&, xcopy&, newbytes&
Cls
Mientras que 1
texto$=LoadFile$("Datei para Packen aussuchen","")
If texto$<>""
Packen testen
x&=FileSize(texto$)
xcopy&=x&
If x&
Dim bereich#, x&+400
BlockRead(texto$, bereich#, 0, x&)
newbytes&=CompressBuffer(bereich#, x&)
If newbytes&
Conjunto("Decimals",2)
Imprimir "Dateiname: "+texto$
Imprimir "Originalgrösse liegt en "+Str$(x&)+" Bytes, comprimiert en "+Str$(newbytes&)+" Bytes."
Imprimir "Packrate liegt en "+Str$(100-(newbytes&*100/x&))+" Prozent."
texto$=texto$+".pck"
BlockWrite texto$, bereich#, 0, newbytes&
Disponer bereich#
Entpacken testen
x&=FileSize(texto$)
If x&
Dim bereich#, x&
BlockRead(texto$, bereich#, 0, x&)
newbytes&=GetDecompressSize(bereich#)
Dim bereich2#,newbytes&
x&=DecompressBuffer(bereich#, x&, bereich2#)
If x&
texto$=texto$+".org"
BlockWrite texto$, bereich2#, 0, x&
Imprimir "Dateiname: "+texto$
Imprimir "Decomprimierte Originalgrösse beträgt "+Str$(x&)+" Bytes."
Imprimir
Más
Imprimir texto$+" podría no entpackt voluntad."
Imprimir
EndIf
Disponer bereich2#
Disponer bereich#
EndIf
Más
Disponer bereich#
Imprimir texto$+" podría no se envasarán."
EndIf
EndIf
Más
BREAK
EndIf
EndWhile
WaitInput
End
|
|
|
| |
|
|
|
 | |
|
| |
|
|
|
 Frank Abbing | Apéndice: Gibt uno como ersten Parámetro en RtlCompressBuffer() y RtlDecomressBuffer() anstelle el 2 una $102 a, entonces erreicht uno una höhere Packrate. Aunque en Kosten el Geschwindigkeit. |
|
|
| |
|
|
|
 | Como podría uno al besten sicher prüfen, si esta Función en el Sistema auch bereitsteht? Mit XProfan ImportDLL después de Función suchen, si la DLL existert? |
|
|
| |
|
|
|
 Frank Abbing | APIs LoadLibrary() y luego GetProcAddress(). So mach ego en Ensamblador. Hatte lo hier no gemacht, porque lo auch así en me bien funktionierte. Dafür voluntad bajo 98 el Características No se ha encontrado, während ellos en meiner Assemblerversion muy wohl gefunden voluntad. Aber me scheint, hay existieren ellos zwar, haben pero no Auswirkungen. Ab XP (Start el Documentación) son el NTDLL.DLL-Características aber sicher disponible, por lo tanto empfehle Yo más una Betriebssystem-Test. |
|
|
| |
|
|
|
 Jac de Lad | Un typische Franco-Genialität.  |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 05.09.2008 ▲ |
|
|
|
|
 Michael Wodrich | Sí, como schliesse Yo mich a...  |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 06.09.2008 ▲ |
|
|
|
|
 Frank Abbing | |
|
| |
|
|
|
 Bernhard Künzel | Posesiones con el Compress.exe getestet, wobei en manchen Gráficos una Fehlermeldung erscheint. Zu wenig Speicher para Bereichs-Variable! Línea 413! Im Anhang son 4 Gráficos, wo esta Fehlermeldung erscheint. |
|
|
| |
|
|
|
 Frank Abbing | Welche Windowsversion (Por favor, en el Signatur angeben )? Huh, Línea 413? Soviel Zeilen ha el Code sí en Weitem no.  Como el Source beigelegt es, kannst du gerne el Ursache erforschen. Mi Tests verliefen todos fehlerfrei. |
|
|
| |
|
|
|
 Bernhard Künzel | ¡Hola Franco, Win Versión XP Home SP2 Profano Versión XProfan11ßRC9 Test con deiner Compress.exe: In el MessageBox kommt el Fehlermeldung "Zu wenig Speicher para Bereichs-Variable!" Línea 413! y en el Profanfenster es ".....podría no gepackt werden" Mit deinem Quellcode: Hier kommt sólo el Meldung en el Profanfenster ".....podría no gepackt werden"
lg Bernhard |
|
|
| |
|
|
|
 Frank Abbing | Sieht de, como wäre dein Arbeitsspeicher a Neige gagangen. Profano kann así viel Speicher no mehr reservieren. Es entonces kein Programmfehler, por lo tanto no Fehlermeldung, pero una Abbruch con Information. Yo bin deswegen así pingelig, como Yo simplemente sólo sicher stellen möchte, dass el Code fehlerfrei se ejecuta. |
|
|
| |
|
|