Externe Dateien in fertige exe einbinden ?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Gast

Betreff: Externe Dateien in fertige exe einbinden ?

BeitragFr, Feb 13, 2004 16:44
Antworten mit Zitat
Hallo,

um die 3D-Möglichkeiten mit Blitz auszutesten, erstelle ich gerade Bildschirmschoner. Schön wäre es wenn ich externe Dateien wie Grafiken oder 3D-Modelle direkt in die fertige exe mit einbinden könnte.

Weis jemand ob das irgendwie geht ?

Viele Grüße
Andi

bruZard

BeitragFr, Feb 13, 2004 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Bytelänge Deiner Exe ermitteln und mit WriteByte Deine zusätzlichen Daten hinten dran hängen. Natürlich musst Du noch den Offset wissen an dem Deine Daten beginnen und wie gross jede Datei ist die Du angehangen hast.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

D2006

Administrator

BeitragFr, Feb 13, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
und weiter?

wie kann ich dann auf die Daten zugreifen. Ehrlich gesagt habe ich es jetzt nicht probiert, aber ich glaube es ist doch nicht möglich, dass eine EXE auf sich selbst zugreift, zumindest mit Blitzbefehlen.

Ich hoffe ich irre mich ...

MfG
 

IonPainter

BeitragFr, Feb 13, 2004 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
habs ausprobiert, es geht

bruZard

BeitragFr, Feb 13, 2004 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sagen wir Deine Exe ist 512kb gross. Dann hast Du 512x1024 Byte (524288 Byte)

Dieser Wert muss als Konstante in Deinem Code stehen.
Code: [AUSKLAPPEN]
Const MY_SIZE = 524288


----------
; Exe
; 524288 Bytes
----------
-> Name der Datei
-> Grösse der Datei
-> Bytes der Datei
----------
-> Name der Datei
-> Grösse der Datei
-> Bytes der Datei
----------
usw.

Im Code liest Du dann zunächst den String aus der den Namen der folgenden Datei enthält. Dazu musst Du den Lesezeiger auf den Offset setzen der ja in MY_SIZE gesichert ist.
Jetzt kannst Du mit ReadLine() den Namen der Datei auslesen und dann mit ReadInt() die Länge der folgenden Daten. Diese liest Du per ReadByte() in einer For...Next Schleife.

Bevor Du mit WriteByte anfängst Daten an das Ende Deiner Datei zu schreiben, musst Du natürlich wissen wie gross Deine Exe ist, sonst schreibst Du in vorhandene Daten.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Gast

BeitragFr, Feb 13, 2004 17:03
Antworten mit Zitat
Ihr seit aber fix hier Smile

Ich werd das so mal testen ob ich das hinkriege.

Vielen Dank.

Viele Grüße
Andi

TheShadow

Moderator

BeitragFr, Feb 13, 2004 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
nix testen - benute doch fertigen code von blitzbase.de

nennt sich exe-packer
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

bruZard

BeitragFr, Feb 13, 2004 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Const MY_SIZE            =0
Const MY_NAME$         ="test.exe"
Const DATEN_ANHANG   =False

If DATEN_ANHANG Then LeseAnhang()

Repeat
   
   UpdateWorld : RenderWorld
   
   Flip
Until KeyHit(1) : End

Function LeseAnhang()
   stream=ReadFile(MY_NAME$)
   offset=MY_SIZE
   If stream
      While Not Eof(stream)
         SeekFile(stream,offset)
         filename$=ReadLine(stream)
         filebytes=ReadInt(stream)
         nstream=WriteFile(filename$)
         If nstream
            For i=0 To nstream
               WriteByte nstream,ReadByte(stream)
               offset=offset+filebytes
            Next
         EndIf
      Wend
      CloseFile
   EndIf
End Function

Hab's jetzt nicht getestet ... zeigt aber wie es geht. MY_SIZE ist hier Null weil ja nichts angehangen wurde, es sichert nur erstmal das Integer in der Exe damit Du ihre echte Grösse ermitteln kannst. DATEN_ANHANG ist False da ja noch nichts angehangen wurde.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group