DLL in Projekt einbinden
spacer
Autor Nachricht
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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? :D

Hoffe ihr könnt mir helfen!

Grüße,
Benny


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 10.12.2010 um 19:50
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 524
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
MisterBum83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 233
Erhaltene Danke: 1

WIN XP
Delphi 6
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Administrator
Beiträge: 8370
Erhaltene Danke: 244

W2k, WXPpro
TP3 - D7pro
BeitragVerfasst: Fr 10.12.10 20:53 
Moin!

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:

Aber mal als einfacher Absatz: pack die DLL als Resource ein und löse sie ins Programmverzeichnis, wenn sie nicht da ist. :idea: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: Fr 10.12.10 20:54 
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Doch kann man überhaupt eine DLL "einbinden"

Kommt darauf an, was du unter "einbinden" verstehst.

_________________
Gruß Michael
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 2682
Erhaltene Danke: 26



BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: Sa 11.12.10 15:36 
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
möchte ich nicht, dass der Anwender immer so unschöne DLL im Programmpfad haben muss, wie z.B auf dem Desktop.
Was ist daran unschön? :gruebel:

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Aber das Einbinden kann ich wohl vergessen ;-)
Du könntest die DLL dynamisch einbinden, dann muss diese beim Start nicht vorhanden sein. Auf diese Weise kannst du diese wie bereits geschrieben wurde in der Exe mitliefern und dann auspacken, wenn sie benötigt wird.

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Wie könnte ich den so ein Setup erstellen?
Zum Beispiel mit InnoSetup, das ich persönlich für das beste Setuptool in dem Segment halte.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 2836
Erhaltene Danke: 182

Win 2000, Win XP
Delphi 7, Turbo Delphi Exp.
BeitragVerfasst: Sa 11.12.10 16:01 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
möchte ich nicht, dass der Anwender immer so unschöne DLL im Programmpfad haben muss, wie z.B auf dem Desktop.
Was ist daran unschön? :gruebel:

Dass das Programm auf dem Desktop liegt?
Wer das macht, gehört bestraft, da ist eine DLL noch das mindeste. Ich wäre ja eher für format C:...

_________________
"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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Luckie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 11803
Erhaltene Danke: 146

WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
BeitragVerfasst: 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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 501
Erhaltene Danke: 29


Delphi 2-4
BeitragVerfasst: Sa 11.12.10 19:12 
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Zusammen!


Hallo auseinander!

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt zwar schon ein Thread zu diesem Thema, aber dieser hat mir nicht wirklich geholfen.


Nicht wirklich? Also unwirklich?

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
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? :D


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).
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext markieren
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?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: So 12.12.10 17:31 
user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 12.12.10 18:26 
So?

ausblenden Delphi-Quelltext markieren
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;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: So 12.12.10 19:42 
Ja, dann noch mit CopyFrom in einen TFileStream und damit ins Tempverzeichnis packen, dann von dort laden, fertig.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 12.12.10 19:48 
...? Mhhh, kannst du mit vielleicht mal ein Beispiel machen?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: Fr 17.12.10 20:24 
ausblenden Delphi-Quelltext markieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 166

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home