Autor |
Beitrag |
LittleBen
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Fr 10.12.10 18:10
Hallo Zusammen!
Es gibt zwar schon ein Thread zu diesem Thema, aber dieser hat mir nicht wirklich geholfen.
Also:
Ich möchte eine Komponente Benutzen, die aber eine lästige DLL benötigt. Nun möchte ich diese DLL in mein Projekt sozusagen "einbinden", damit ich diese lästige DLL nicht im Programmpfad oder im System32 haben muss. Ich möchte mein Programm später vielleicht auch mal auf meine Seite stellen oder Freunden schicken und da wäre die DLL(s) sehr unschön...
Doch kann man überhaupt eine DLL "einbinden" oder habe ich das grad nur erfunden?
Hoffe ihr könnt mir helfen!
Grüße,
Benny Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 10.12.2010 um 19:50
|
|
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Fr 10.12.10 18:36
Hmm reicht das nicht, die einfach in den Programmordner zu kopieren?
Bei mir klappt es eigentlich immer wenn ich die entweder in den system32- oder in den .exe Ordner kopiere.
Lg
|
|
MisterBum83
      
Beiträge: 245
Erhaltene Danke: 2
WIN XP
Delphi 6
|
Verfasst: Fr 10.12.10 20:08
Kopiere die notwendige DLL in dein Programmverzeichnis, binde diese (dynamisch oder statisch) in dein Programm ein und nutze die notwendige Funktion.
Dann kannst du allen dein Programm mit der DLL zur Verfügung stellen.
Gruß MisterBum
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 10.12.10 20:53
Moin!
LittleBen hat folgendes geschrieben : | Doch kann man überhaupt eine DLL "einbinden" oder habe ich das grad nur erfunden? |
Man kann mit viel Aufwand ein Executable aus einem MemoryStream starten, also theoretisch auch eine DLL.
Aber mal als einfacher Absatz: pack die DLL als Resource ein und löse sie ins Programmverzeichnis, wenn sie nicht da ist.  Hat zwar auch ein paar Haken, aber gut...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.12.10 20:54
LittleBen hat folgendes geschrieben : | Doch kann man überhaupt eine DLL "einbinden" |
Kommt darauf an, was du unter "einbinden" verstehst.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 10.12.10 23:16
MoleBox/VMWare ThinApp wäre dafür gedacht, aber ich würde davon abraten. Am besten machst du eine Setup, die die Applikation sauber installiert und wieder deinstalliert.
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Sa 11.12.10 15:16
Vielen Dank für die vielen Antworten!
Also auf meinem Computer habe ich die DLL ins System32 kopiert, kein Problem.
Es geht nur darum, dass wenn ich mein Programm online stelle, möchte ich nicht, dass der Anwender immer so unschöne DLL im Programmpfad haben muss, wie z.B auf dem Desktop.
Aber das Einbinden kann ich wohl vergessen
Wie könnte ich den so ein Setup erstellen?
Grüße,
Benny
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 11.12.10 15:36
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 11.12.10 16:01
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 11.12.10 16:11
Also wenn der Anwender die Programmdateien aus dem Archiv auf dem Desktop entpackt und er da nun ein paar Dateien rumfliegen hat, ist das sein Problem.
Für diesen Beitrag haben gedankt: Martok
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Sa 11.12.10 19:12
LittleBen hat folgendes geschrieben : | Hallo Zusammen! |
Hallo auseinander!
LittleBen hat folgendes geschrieben : | Es gibt zwar schon ein Thread zu diesem Thema, aber dieser hat mir nicht wirklich geholfen. |
Nicht wirklich? Also unwirklich?
LittleBen hat folgendes geschrieben : | Ich möchte eine Komponente Benutzen, die aber eine lästige DLL benötigt. Nun möchte ich diese DLL in mein Projekt sozusagen "einbinden", damit ich diese lästige DLL nicht im Programmpfad oder im System32 haben muss. Ich möchte mein Programm später vielleicht auch mal auf meine Seite stellen oder Freunden schicken und da wäre die DLL(s) sehr unschön...
Doch kann man überhaupt eine DLL "einbinden" oder habe ich das grad nur erfunden?  |
Was Du suchst, kann das Programm "PEBundle", das sich über eine Internetsuchseite leicht beschaffen lassen müßte. Es vereint zu einer neuen Exe-Datei. Es kann aber durchaus (in seltenen Fällen?) sein, daß die Funktionalität des Programms (bzw. des Duos, das aus Exe- und DLL-Datei besteht), dann nicht oder zumindest nicht vollständig gegeben ist. Bei globalen Hooks z.B. klappt es mit erheblicher Wahrscheinlichkeit nicht, also war es für mich nach anfänglicher Euphorie uninteressant. Was man in einer Datei vereint und dann immer noch funktioniert, kann man dann aber gleich in eine Programmdatei implementieren, falls möglich (also die Quelltexte vorliegen).
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: So 12.12.10 17:07
Also ich habe mich jetzt mal mit den Resourcen beschäftigt. Habe auch schon Musik, Bilder etc. "reingepackt" und aufgerufen.
Die *.rc datei sieht ja so aus:
Zitat: | Song1 WAVE Test.wav |
Und aufrufen so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| implementation
{$R *.dfm} {$R MyRes.res} procedure TForm1.Button1Click(Sender: TObject); begin PlaySound(PChar('Song1'), hInstance, SND_RESOURCE Or SND_ASYNC); end; | Funktioniert alles,gut...Aber wie sieht die *.rc Datei mit na DLL aus?
so..?
Zitat: | Datei1 RCDATA Test.dll |
Wenn ja, wie rufe ich sie auf?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.12.10 17:31
LittleBen hat folgendes geschrieben : | Wenn ja, wie rufe ich sie auf? |
Indem du die dann zur Laufzeit auspackst bevor du diese mit LoadLibrary lädst. Zum Beispiel mit TResourceStream.
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: So 12.12.10 18:26
So?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| implementation
{$R *.dfm} {$R MyRes.res} procedure TForm1.FormCreate(Sender: TObject); var Res: TResourceStream; begin if FindResource(hInstance, 'Datei1', RT_RCDATA) <> 0 then begin Res := TResourceStream.Create(hInstance, 'Datei1', RT_RCDATA); showmessage('Gefunden'); end; end; |
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.12.10 19:42
Ja, dann noch mit CopyFrom in einen TFileStream und damit ins Tempverzeichnis packen, dann von dort laden, fertig.
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: So 12.12.10 19:48
...? Mhhh, kannst du mit vielleicht mal ein Beispiel machen?
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Fr 17.12.10 19:37
Ich versteh nur das mit dem Tempverzeichnis nicht. Könntest du mir mal mit ein bisschen Code auf die Sprünge helfen?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 17.12.10 20:24
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var TempPath: PChar; TempPathBufferSize: Integer; begin TempPathBufferSize := GetTempPath(0, nil); GetMem(TempPath, TempPathBufferSize); try if GetTempPath(TempPathBufferSize, TempPath) <> 0 then begin ShowMessage('Das temporäre Verzeichnis ist: ' + TempPath); end else raise Exception.Create(SysErrorMessage(GetLastError)); finally FreeMem(TempPath, TempPathBufferSize); end; | Statt dem ShowMessage kannst du dann in dem Verzeichnis die DLL ablegen und danach mit LoadLibrary usw. laden. Und nach der Benutzung und dem Entladen mit FreeLibrary kannst du die DLL auch direkt wieder löschen.
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Fr 17.12.10 21:38
Okay, dahin soll ich die DLL kopieren. Wie mach ich das am besten? DU hast mal "CopyFrom" angesprochen. Habe noch nie damit hantiert. Könntest du mir zeigen wie ich das da rein kopiere?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 17.12.10 23:01
Du erzeugst einen TFileStream mit dem Temppfad und dem Namen der DLL, dann kopierst du mit CopyFrom den Inhalt deines TResourceStream da rein.
|
|