Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249379 (10815)
  Suchen
 Zurück zur Übersicht
 AutorThema: Dll Datein in Verzeichnis kopieren
Florian
Datum:27.10.01 18:59 Antwortenals Email verschicken (kip.richert@uni.de) 


Hallo Liebe Profangemeinde

Ist es möglich oder hat es einer von euch schon geschaftt Dateien wie Exen und Bmps usw. aus einer DLL Datei in ein Verzeichniss zu kopieren?

Ginge das sogar ohne externes programm. das gheisst ich will bei meinem Programm die daten einfach in das programmverzeichniss kopieren.

Grüße euer flo


Thorsten
Datum:27.10.01 20:32 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Ehrlich gesagt, versteh ich deine Frage
nicht so ganz ????

was soll aus einer DLL wohin kopiert werden !!!

Thorsten



Florian
Datum:28.10.01 11:23 Antwortenals Email verschicken  


"Ist es möglich oder hat es einer von euch schon geschaftt Dateien wie Exen und Bmps usw. aus einer DLL Datei in ein Verzeichniss zu kopieren?"

Wieso unverständlich...

ich habe eine DLL, die eine Exe, eine Bitmap und ein Icon enthält.

ich starte nun mein Programm.

Nun sollten die eine Exe, die eine Bitmap und das eine Icon aus der DLL in das Verzeichniss C:\Programme\MeinSpiel kopiert werden.

Ist das nun verständlich. Vielleicht gibt ja ein befehl wie copyddlfileto oder so...

Kresse Grüße euer florian




Florian
Datum:28.10.01 11:28 Antwortenals Email verschicken  


Ich weiss das klingt nach sehr viel arbeit. Vielleicht ginge s ja wenigstens bmps aus einer dll in ein verzeichnis zu kopieren. dann würde man einfach die exe in bmp unmwandeln und vor dem kopieren wieder in exe umwandeln. oder gibt e sonst noch gute oder andere möglichkeiten das zu machen

mfg florian


Thorsten
Datum:28.10.01 18:21 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Hallo Florian ...

Das sind dann aber keine ECHTEN DLL's mehr,
sondern mehr Resorcen alle in einer Datei,
die nur den Extension-Namen DLL trägt !!

In reinen DLLs werden funktionen aufgerufen,
die dann etwas ereldigen oder einen Wert
zurückgeben, höchstens halt noch Bilder,
aber eine EXE in einer DLL kann dann keine
DLL mehr sein.

zum zweiten: Ja, es ist möglich, beliebig
aus einer Datei (hier die DLL) sachen
herauszukopieren und woanders abzuspeichern.
Bereichsvariabeln und BlockRead, BlockWrite
sind dafür notwendig und die Adressen in
der Orginal Datei, wo was zu finden ist.

Thorsten



Florian
Datum:29.10.01 16:10 Antwortenals Email verschicken  


Aber die heissen doch noch DLL´s oder irre ich mich jetzt. ist ja auch egal.

zum zweiten: Ja, es ist möglich, beliebig
aus einer Datei (hier die DLL) sachen
herauszukopieren und woanders abzuspeichern.
Bereichsvariabeln und BlockRead, BlockWrite
sind dafür notwendig und die Adressen in
der Orginal Datei, wo was zu finden ist.

Echt also könnte ich eine EXE aus einer (nicht mehr echten ;-)) DLL in ein Verzeichniss kopieren. Cool.

Wärst du vielleicht so net un d wirst mir das mal mit einem kleinen Beispiel zeigen. Das mit den Adressen verstehe ich nicht sorry. Hab mir mal die Hilfe nach BlockWhright usw angeschaut weiss netmal was ich mit diesen Dingen anstellen kann.

Grüße Florian

(Ich kenne die Regel 1 der Forumvorschiften)


Uwe ''Pascal'' Niemeier
Datum:30.10.01 09:29 Antwortenals Email verschicken (Pascalxd@owl-online.de) 


Hallo Florian!

Das mit der exe in der dll mußt du nochmal genauer erklären: Wie kommt sie da rein und was soll sie dort?? Und woher weißt du, daß sie da ist??

Ich glaube nämlich langsam, daß hier ein grundsätzliches Mißverständnis vorliegt:
Einzelne *Funktionen* lassen sich aus einer dll nicht extrahieren, weder als exe noch sonstwie.
Bei Resourcen ist das was anderes; die sind eigendlich mehr so 'ne Art Zugabe.

Was Bitmaps betrifft, so kannst du die doch mit DrawExtBmp im Profanfenster zur Anzeige bringen und direkt von da als *.bmp-Datei abspeichern.

HTH
Pascal


Thorsten
Datum:30.10.01 16:08 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Nochmal Hallo Florian,

Im Prinzip lässt sich das zwars erklären,
nur ohne einen konkreten Anhaltspunkt
ist das etwas schwierig, zumal in der PRF-Hilfe
ja ein Beispiel für BlockRead und BlockWrite
steht ...

Nur das mit deiner DLL versteh ich ehrlich
gesagt, nicht so ganz, woher weist du, das es
da eine EXE drin gibt !!! und wo die sich,
(an welcher Position und länge), befindet ???

Vieleicht wäre es einfacher zu wissen, was
du genau vorhast.

Thorsten

ps: wenn es dir darum geht, alle deine Bilder
,Sounds und sonstwas mit in dein Programm
zu packen oder als DLL zu tarnen, dann
wäre der RES-SHOP-PRO V2.0 ew. schon das, was
du suchst. Damit befinden sich alle deine
Bilder, Sounds, usw. später in der kompletten
fertigen EXE Datei. Genaueres dazu steht
aber im Dok-File zum Programm ...




Florian
Datum:30.10.01 18:50 Antwortenals Email verschicken  


Gut nochmal.

Ich möchte meinem Anwender 1 Programm und eine DLL geben. In der DLL tue ich vorher 1 EXE, 1 BMP und 1 Hilfe Datei.

Der Anwender startet nun das Programm (siehe oben). Daraufhin sollen die 1 Exe, die 1 BMP und die 1 Hilfe, die sich in der DLL befinden, die ich vorher reingetan habe, in das Verzeichnis C:\PROGRAMME\LA kopieren.

Ich hoffe das ist nun verständlich. Im Grunde das das 1 Programm wie ein Installationsprogramm funzt, das heisst es soll die Dateien "Entpacken".

mfg




Florian
Datum:30.10.01 18:54 Antwortenals Email verschicken  


ich benutze die ResHacker.exe um die 1 BMP, die 1 EXe und 1 Hilfedatei in die DLL hineinzutuen.

nun das weiss ich auch mit dem bmp anzeigen und nacher sichern. nur es muss doch ne möglichkeit mit api geben, die dateien in ein verzeichnis zu koieren oder liege ich da ganz falsch.

also weiss ich wo sich die 1 bmp, die 1 exe und die 1 hilfedatei befinde und wie groß diese sind, da ich diese ja vorher selber reintue.

mfg flo




Thorsten
Datum:30.10.01 19:35 Antwortenals Email verschicken (mrk@mrk-soft.de) 


wie bereits erwähnt, ist das ganze mit
viel arbeit verbunden, abgesehn davon,
das ein SETUP-Prog locker 300 KB gross
ist, wenn es mit Profan geschrieben wird,
welches sich der Anwender zusätzlich
übertragen muss. Daher macht es ehrlich gesagt,
so nicht viel sinn.

- Einfacher ist es, ein SETUP-Programm zu
werwenden, die es schon zahlreich auf
dem Markt gibt,

- oder einfach alle Files mittels eines
Packers (z.b ZIP oder RAR), zusammenzupacken,

- oder einfach alle benötigten Teile für das
eigene Programm selber in die EXE zu packen,
so das der Anwender nur ebend DAS exe Programm
bekommt, in der alle benötgisten Teile mit
drinn sind.

Zum Thema Setup fällt mir da noch was ein:

Immer wieder sehe ich, das jemand ein
relativ einfaches Programm schreibt, aber
dafür erst ein riesen SETUP macht.

Ehrlich gesagt landen solche Teile meist
nach der übertragung in der Ablage "schredder"
wenn ich soetwas sehe, nur um mal zu schauen,
um was es sich da handelt. OK, nicht jedes
Programm, aber was ich bisher gesehen habe,
was manche Leute da zusammenbraten und dafür
ein SETUP machen ..... Da hätte es gereicht,
einfach alles als ZIP oder RAR Archiv bereit-
zustellen, oder ebend von vorneheeein alles
in das ausführbare Programm, also der EXE.


Bitte fühlt sich jetzt hier KEINER direkt
angesprochen oder auf den "Fuss" getreten,
aber ein SETUP ist dafür, um ew. Registry
Einträge oder Systemerweiterungen vorzunehmen,
damit das Programm funktioniert, meist sogar
nach einem Neustart.

Thorsten



Thorsten
Datum:30.10.01 19:20 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Hallo Flori,

Obwohl es nicht viel Sinn macht, den das
SETUP-Programm würde locker 300 KB
haben, sammt deiner "DLL" Daten, mit
nochmal EXE, BMP und HILFE mit gut 300 KB,
würden hier die 300 KB Setup das ganze
aufblähen, aber egal, wir wollen ja nicht
darüber diskutieren, obs nun sinn macht oder
nicht, sondern wie es Funktioniert.

Also,

du hast also 3 Files, die EXE, das BMP, und
die Hilfe. Alle diese befinden sich in einer
Datei hintereinander. Das sähe z.b so aus

_____ Adresse 0
| |
| exe |
| |
|_____| Adresse 384512
|BMP |
|_____| Adresse 444635
| |
|Hilfe|
|_____|

Als erstes ist die EXE in der Datei,
(die DLL). die exe hätte z.b 384 KB,
(hier 384.512 Bytes). Dahinter befindet
sich unmittelbar die BMP, mit einer grösse
von 60 KB, (60.123 Bytes), hinter der BMP
liegt die Hilfe mit 6.789 Bytes.

Der Aufbau ist deshalb wichtig, da wir über
die Adressen nun auf die einzelnen Teile in
der Datei zugreifen können.

Daher, am Anfang der DLL !!, (das ist ebend
Adresse 0, liegt die EXE, mit 384512
Bytes. diese lesen wir aus und schreiben diese
nei als Datei, ganz einfach:

Declare bereich#
dim bereich#,384512

assign #1,"setup.dll"
OpenRW #1
BlockRead(#1,bereich#,0,384512)
CloseRW #1

'und die EXE nun als File schreiben
Assign #1,"dasprogramm.exe"
OpenRW #1
BlockWrite #1,bereich#,0,384512)
CloseRW #1

Dispose bereich

Das BMP Bild liegt hier an Adresse 384513 und
hat eine länge von 60.123 Bytes. Möglich
wäre hier:

Declare bereich#
dim bereich#,60123

assign #1,"setup.dll"
OpenRW #1
Seek #1,384513
BlockRead(#1,bereich#,0,60123)
CloseRW #1

'und die EXE nun als File schreiben
Assign #1,"dasprogramm.exe"
OpenRW #1
BlockWrite #1,bereich#,0,60123)
CloseRW #1

Dispose bereich

Das ganze sollte reichen um zu zeigen, wie
BlockRead und blockWrite Funktionieren,
und Bereichsvariabeln. Besser ist es jedoch,
alles komplett in eine Bereichsvariabel einzulesen und dann aus dieser die
einzelnen Teile heraushohlen.

'alles einlesen
declare b#

dim b#,451424
Assign #1,"setup.dll"
openRW #1
BlockRead(#1,b#,0,451424)
CloseRW #1

'exe erstellen
assign #1,"meinprog.exe"
OpenRW #1
BlockWrite #1,b#,0,384512
CloseRW #1

'bmp erstellen
assign #1,"bild.bmp"
OpenRW #1
BlockWrite #1,b#,384512,60123
CloseRW #1

'hilfe erstellen
'bmp erstellen
assign #1,"hilfe.hlp"
OpenRW #1
BlockWrite #1,b#,444635,6789
CloseRW #1

Das ist NUR ein Beispiel, die Adressen sind
Fiktif, ich kenne dja die grösse deiner
EXe, deines Bildes und der Hilfe nicht,
also musst du diese selber in erfahrung
bringen.

Thorsten




Florian
Datum:30.10.01 19:35 Antwortenals Email verschicken  


wow


Florian
Datum:30.10.01 19:36 Antwortenals Email verschicken  


thx thx thx nun werde ich mich mal an die arbeit machen

danke thorsten für die anschauliche hilfe


Uwe ''Pascal'' Niemeier
Datum:31.10.01 09:35 Antwortenals Email verschicken (Pascalxd@owl-online.de) 


Hallo Leute!

Sooo einfach ist das nun auch wieder nicht ;-)

Grundsätzlich ist eine dll genauso aufgebaut wie eine exe, d.h. es gibt einen DOS-Header, spezielle Signaturen und eine Unmenge von AdressTables mit Pointern auf Resourcen, im- und exportierte Funktionen usw. (Nähere Infos bei MSDN oder www.wotsit.org )

Abgesehen davon würde der Export einer Bitmap mit BlockRead/BlockWrite schon daran scheitern, daß bei vielen Standart-Resourcen beim Einlinken in die dll der Dateiheader gekürzt wird.

Mein Tipp an Florian: Schau dir mal den "API-Workshop Resourcen" unter http://members.aol.com/pascalxd/pages/infos.html
an. Da ist eine Demo zum Export eingelinkter Midi's enthalten. Nach dem gleichen Prinzip kann jede beliebige *benutzerdefinierte* Resource extrahiert werden.
Ein entsprechendes Beispiel für bmp's habe ich allerdings im Moment nicht zur Hand; da bliebe DrawExtBmp die 1. Wahl.

HTH
Pascal


Florian
Datum: 31.10.01 17:33 Antwortenals Email verschicken  


Also das is ja doch schwerer als ich dachte mmmhh.

vielleicht lasse ich es das doch. trotzdem schaue ich die api funk. sachen nochmal an.

vielleichts klappts ja doch irgendwie.

thx

flo


 Zurück zur Übersicht