Autor |
Beitrag |
toenne
      
Beiträge: 51
|
Verfasst: Mo 11.01.10 23:12
Mal wieder eine blöde Frage: Besteht die Möglichkeit aus einer Anwendung heraus zur Laufzeit eine DLL zu erstellen?
Hintergrund: Bislang habe ich mit einem externen Programm ein BMP erstellt. Dann habe ich eine test.rc mit dem Inhalt... Zitat: | BILD1 BITMAP "test.bmp" |
...erstellt und das ganze in Delphi 7 so kompiliert:
Zitat: | library Bild;
{$R 'test.res' 'test.rc'}
begin
end.
|
In der eigentlichen Zielapplikation wird das Bild dann mittels...
Zitat: | BildDatei := LoadLibrary('Bild.dll');
Bitmap.LoadFromResourceName(BildDatei, 'BILD1');
|
...geladen.
Ich weiss, klingt grauenhaft umständlich  . Hat aber seinen Sinn, müsst ihr mir jetzt einfach mal glauben  .
Jetzt ist es so dass ich das BMP direkt in einer mittels Delphi geschriebenen Anwendung erzeuge, da wäre es natürlich eine erhebliche Vereinfachung wenn ich dann aus dieser Anwendung heraus auch gleich die DLL erstellen könnte.
Irgendeine Idee dazu?
Schöne Grüsse
Toenne
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 11.01.10 23:14
dazu bräuchtest du einen compiler  wenn du den hast dann könnte es gehen.
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 11.01.10 23:18
Warum nicht einfach das Bild als *.bmp Datei mitgeben, sondern unbedingt als Resource?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
toenne 
      
Beiträge: 51
|
Verfasst: Mo 11.01.10 23:30
Hat seinen Sinn, glaubs mir einfach  .
Zitat: | dazu bräuchtest du einen compiler wenn du den hast dann könnte es gehen. |
Öhem...könntest du das etwas präzisieren? Stehe leider gerade etwas auf dem Schlauch wie du das meinst - evtl. einen externen Compiler mit den entsprechenden Parametern aus der Anwendung heraus starten? Bringt Delphi einen solchen mit (bislang habe ich nur mit der GUI gearbeitet *schäm*)? Wäre dann nämlich eine durchaus genehme Lösung.
Wie müsste das dann bei obigen Beispiel lauten?
Gruss
Toenne
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 11.01.10 23:41
dann bräuchst du auf jedem rechner auf dem du die DLL erzeugen willst eine installierte Delphi-Version mit mind. Professional.
aber zusätzlich zu dem Compiler (da könntest du ja theoretisch den von devcpp nehmen) bräuchtest du einen Ressourcencompiler. Wo du den herbekommst hab ich keine ahnung. am besten wäre es glaub ich wenn du dir überlegst ob du nicht doch irgendwie eine andere möglichkeit findest.
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
toenne 
      
Beiträge: 51
|
Verfasst: Mo 11.01.10 23:41
Ich glaube (hoffe?) ich habs schon:
- Das BMP erstellen und speichern (das wird archiviert, brauche ich also ohnehin als Datei)
- Ein ASCII-File mit ' BILD1 BITMAP "test.bmp" ' als Inhalt unter 'Test.rc' speichern
- Ein ASCII-File mit ' library Bild; ...usw... ' als Bild.dpr speichern
- Dann ' ShellExecute(0, 'open', 'dcc32 Bild', nil, nil, SW_NORMAL); ' ausführen
- Zu guter letzt die beiden obigen ASCII-Files wieder löschen.
Korrekt?
Gruss
Toenne
Edit:
Hat sich überschnitten  .
Das ganze muss nicht portierbar auf andere Rechner sein, selbst die Pfade können fix sein.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 11.01.10 23:43
Wird aber nur bei dir lokal klappen, weil die dcc32 ein Bestandteil von Delphi ist.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 11.01.10 23:44
Wenn in der DLL kein Code angepasst werden muss, kannst du auch einfach die DLL ohne Resourcen dir merken und dann das Resourcen-Verzeichnis der DLL im Speicher patchen, bevor Du deren Image auf Platte schreibst. Dabei gibt es zwar eine Reihe von Dingen zu beachten, aber Grundlegend dürfte es damit erstmal gehen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
toenne 
      
Beiträge: 51
|
Verfasst: Mo 11.01.10 23:52
@Xentar
Das macht nix, ist wirklich nur als Erleichterung für diesen Arbeitsplatz gedacht.
@Benny
Der Code müsste nur dahingehend angepasst werden dass der BMP-Name variiert. Aber da könnte man ja zweigleisig fahren, also einen Dummy mit immer gleichem Namen für die DLL erzeugen und eine Kopie davon als eigentliche BMP fürs Archiv.
Den Rest von dem was zu geschrieben hast habe ich aber nicht im Ansatz kapiert, muss ich erstmal verdauen  .
Gruss
Toenne
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 11.01.10 23:55
Moin!
Hatte jaenicke nicht mal mit einer MS-API experimentiert, die Resourcen austauschen/bearbeiten konnte?  Kann den Fred nur grad nicht finden...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 12.01.10 00:36
Es gab glaube mal für ne etwas ältere Version von Delphi n Demo, wo ein kleiner Resourcen-Viewer implementiert war. Mit etwas Arbeit lässt sich daraus durchaus das Konzept erkennen und mit den benötigten Strukturen auch ein Writer bauen.
Das Template der DLL kann dabei gleich sein, weil du das gesamte Resource Directory dynamisch schreiben lassen kannst.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.01.10 01:16
|
|
toenne 
      
Beiträge: 51
|
Verfasst: Di 12.01.10 10:44
So, funktioniert schonmal soweit - besten Dank für den Tip mit dem Kommandozeilen-Compiler!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| BMPname := 'C:\delphi\test.bmp'; SavePictureDialog1.FileName := BMPname; if SavePictureDialog1.Execute then BMPname:=SavePictureDialog1.FileName; Image.Picture.Bitmap.SaveToFile(BMPname);
AssignFile (Text_Datei, 'C:\delphi\test.rc'); Rewrite(Text_Datei); Writeln(Text_Datei, 'BILD1 BITMAP "' + BMPName + '"'); CloseFile(Text_Datei);
AssignFile (Text_Datei, 'C:\delphi\test.dpr'); Rewrite(Text_Datei); Writeln(Text_Datei, 'library Bild;'); Writeln(Text_Datei, label1.caption ); Writeln(Text_Datei, 'begin'); Writeln(Text_Datei, 'end.'); CloseFile(Text_Datei); ShellExecute(0, 'open', 'C:\delphi\Bin\BRCC32.EXE', 'C:\delphi\test.rc', nil, SW_NORMAL); ShellExecute(0, 'open', 'C:\delphi\Bin\DCC32.EXE', 'C:\delphi\test.dpr', nil, SW_NORMAL); |
Die DLL wird brav erzeugt und funktioniert auch - prima!
Schöne Grüsse und nochmals vielen Dank für die Denkanstösse
Toenne
|
|
|