| Autor |
Nachricht |
LittleBen
      
Beiträge: 166
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
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
HenryHux
      
Beiträge: 524
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: 233
Erhaltene Danke: 1
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: 8370
Erhaltene Danke: 244
W2k, WXPpro
TP3 - D7pro
|
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
       
Beiträge: 11803
Erhaltene Danke: 146
WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
|
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.
_________________ Gruß Michael
|
| |
|
|
delfiphan
       
Beiträge: 2682
Erhaltene Danke: 26
|
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: 166
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: 15833
Erhaltene Danke: 737
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Sa 11.12.10 15:36
|
| |
|
|
Martok
      

Beiträge: 2836
Erhaltene Danke: 182
Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
|
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."
Ich code EdgeMonkey -~==~- #ee-lounge in Freenode
|
| |
|
|
Luckie
       
Beiträge: 11803
Erhaltene Danke: 146
WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
|
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.
_________________ Gruß Michael
Für diesen Beitrag haben gedankt: Martok
|
| |
|
|
Delphi-Laie
       
Beiträge: 501
Erhaltene Danke: 29
Delphi 2-4
|
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: 166
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:
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: 15833
Erhaltene Danke: 737
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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: 166
Win 7, Mac OS
Delphi 7
|
Verfasst: So 12.12.10 18:26
|
| |
|
|
jaenicke
      
Beiträge: 15833
Erhaltene Danke: 737
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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: 166
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: 166
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: 15833
Erhaltene Danke: 737
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
|
Verfasst: Fr 17.12.10 20:24
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: 166
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: 15833
Erhaltene Danke: 737
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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.
|
| |
|
|