![]() |
DLL als Erweiterung für mein Programm
Hallo wiedermal! (Ich weiß nicht, wo ich den Thread hinschreiben soll, ich hoffe HIER ist richtig)
Ich hab mir heute mal die Benutzung von DLLs reingezogen. Nun ist es ja so, dass das Programm, welches irgendwelche Funktionen aus DLLs nimmt, Nicht starten kann, wenn es die DLL nicht findet. Ich würds aber gern so machen, dass wenn die DLL 'xyz.dll' im Verzeichnis liegt, dann soll ein zusätzlicher Button angezeigt werden, mit dem man dann das Formular aus der DLL aufrufen kann, oder irgendeine andere Zusatzfunktion, quasi a Plugin?! Bsp: Ich hab ein Programm, mit dem man Werte errechnen kann und wer besonders nett fragt, bekommt die Zusatzfunktion (die DLL) und kann sich mit der DLL ein Diagramm von den Werten anzeigen lassen (was die DLL beinhalten würde). Aber wenn das Prog schon VOR dem starten streikt, weil die DLL nicht da ist, die's evtl. benutzen soll, könnt ich das schlecht als Zusatzfunktion einbauen. Bei Counter-Strike ist es ja auch so, man kann sich verschiedene Mods holen, die DLLs von denen einbinden und schon hat man schöne Zusatzfunktionen! Danke schonmal! |
Re: DLL als Erweiterung für mein Programm
du kannst die DLL statisch und dynamisch einbinden
dynamisch ist späteres "hinzuladen" bei schon laufendem programm -> das ist das was du brauchst |
Re: DLL als Erweiterung für mein Programm
Schau mal
![]() |
Re: DLL als Erweiterung für mein Programm
Mit den Infos werd ich sicher was anfangen können!! Ich schaus mir aber erst morgen an (geh jetzt ertsmal ins Bett).
-> Wenns Probleme oder Fragen gibt, meld ich mich nochmal! Danke! :thuimb: |
Re: DLL als Erweiterung für mein Programm
Die Tutorials von Delphhi-Source und Delphi-Treff sind älter und unterscheiden sich (zumindest beim statischen einladen von DLLs) zu der Methode, die ich mit Delphi 6 gelernt habe. Sollte ich die jetzt trotzdem verwenden oder geht das in D6 anders?
|
Re: DLL als Erweiterung für mein Programm
Das mit dem Button könntest du so lösen:
Delphi-Quellcode:
if FileExists(<PfadzurDLL>) then
Button.Visible := true else Button.Visible := false; |
Re: DLL als Erweiterung für mein Programm
Das ist ja klar. Aber um das ganze so zu gestalten muss die DLL dynamisch eingeladen werden -> Wie macht man das. Ich hab gelesen, dass man sich selbst um die Verwaltung (Laden, rausschmeißen ...) kümmern muss, nur wie genau ist jetzt das Prob. Wie gesagt, bin mir halt nicht sicher ob es in D6 genauso geht wie in den Tuts, will jetzt nichts falsches lernen. :lol:
|
Re: DLL als Erweiterung für mein Programm
Natürlich geht das genauso, die Tuts sind glaub ich sogar "nur" mit Delphi 5 geschrieben.
Warum soolte es denn nicht funktionieren? :gruebel: Probieren geht über studieren ;-) |
Re: DLL als Erweiterung für mein Programm
Ja eben, alle sind mit D5 geschrieben, aber bsw. wird in die Projektdatei der Statischen DLLs dort nochmal die ganze Funktion reingeschrieben
Delphi-Source:
Code:
Ich hab's so gelernt:
library Project1;
uses SysUtils, Classes; {$R *.RES} function addiere(zahl1, zahl2: integer): integer; stdcall; begin result:=zahl1+zahl2; end; exports addiere; begin end.
Code:
Und da ist je schon ein kleiner Unterschied ;-)
library Project1;
uses SysUtils, Classes; {$R *.RES} exports function addiere name 'addiere'; begin end. |
Re: DLL als Erweiterung für mein Programm
Wie es so schön heist "viele Wege führen nach Rom".
Es sind beide möglichkeiten richtig.
Delphi-Quellcode:
library Project1;
uses SysUtils, Classes; {$R *.RES} function addiere(zahl1, zahl2: integer): integer; stdcall; begin result:=zahl1+zahl2; end; exports addiere; {verweist auf das addiere oben, was genauso exportiert wird wie es oben dasteht um das so zu verwenden muß die Funktion vor dem export schon mal vorkommen, damit der compiler weis wie es richtig ist. } function addiere name 'add'; {damit kann ich der Funktion einen anderen namen geben, quasi ist der name der funktion in der Unit addiere und wenn du die unit später von deinem programm aus der dll aufrufst dann heist sie add} begin end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz