Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249379 (10815)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Dll Datein in Verzeichnis kopieren
Florian
| Datum:27.10.01 18:59 (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 (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 |
"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 |
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 (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 |
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 (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 (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 |
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 |
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 (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 (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 |
wow
Florian
| Datum:30.10.01 19:36 |
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 (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 |
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