Wie in einer DLL eine andere DLL nutzen?
-
Hallo!
Ich möchte eine DLL programmieren, welche eine andere DLL benutzt.
In dieser anderen DLL sind Funktionen auf die ich zugreifen möchte,
dei DLL und dazugehörige Header-Datei sind vorhanden.Programmierumgebung ist "MS Visual Studio Express Edition 2005",
und ich bin ein totaler newbie.Wie lässt sich das machen?
Gruß
-
Entweder Du hast eine Library und eine Header für die DLL, dann verwendest Du diese entsprechend. Header Datei in die Source Datei einfügen. Lib-Datei zum Linker.
Ansonsten musst Du LoadLibrary machen, mit GetProcAdresse die entsprechende Funktion lokalisieren und mit der richtigen Signatur aufrufen.
-
Ich muss mich wohl etwas korrigieren, ich habe die .dll, .lib und .h - Dateien.
Was ist denn sinnvoller/einfacher, die .dll wie du sagst mit "LoadLibrary" zu laden, oder mit der header und library zu arbeiten?
-
LoadLib lädt zur Laufzeit. Dadurch kann man die DLL auch wieder entladen. Mitlinken lädt bei Programmstart.
LoadLib verwendet man z.B. bei Plugins.
Man will ja nicht alle DLL gleich laden. Weiters könnte man dann ja kein Plugin hinzufügen.
Wenn du dir den Code ersparen willst der für LoadLib erforderlich ist dann linke hinzu.
-
Naja, die DLL wird schon direkt gebraucht werden.
Im Prinzip möchte ich eine DLL schreiben, die eine andere benutzt und noch weitere Funktionen dazu bereitstellt.
Für Testzwecke wird dann ja zwangsläufig auch ne kleine GUI anfallen...Aber erstmal muss ich die DLL-Programmierung verstehen, da habe ich noch keinen Durchblick.
Bin ja auch noch Anfänger.
Gruß
-
-
Implizit laden (also Verwendung der Lib) macht man wenn auch beide DLLs letzten Endes sowieso immer nur zusammen laufen können. Dito, wenn es um den Export von Klassen etc. geht.
Explizit Laden, hat den Charme, dass die DLL nicht da sein muss, oder man auch eine andere DLL mit anderem namen laden kann, die evtl. das selbe Interface bietet. (Hast Du ja schon gehört: Add-Ins etc.)
-
Ein Beispiel zur Erstellung einer DLL und einer diese benutzenden EXE habe ich gefunden und mal durchgeführt:
http://msdn2.microsoft.com/de-de/library/ms235636(VS.80).aspxAllerdings komme ich jetzt nicht weiter, wie und wo ich die andere DLL einfügen kann, was ich dafür wo einstellen muss, und wie ich die nutzen kann...
Ich muss definitiv diese eine DLL da irgendwie eingebunden bekommen,
und die muss immer mit geladen sein.Vielleicht kann mir da jemand helfen?
Vielen Dank.
-
Zu einer DLL gibt es eine LIB und eine Header.
Die Header wird included. Die LIB wird gelinkt.
Durch das Includen der Header kannst du die Methoden verwenden.
Beim kompilieren wird die LIB hinzugelinkt und somit sind die Methoden in der DLL auch vorhanden.
Wenn die DLL dann geladen wird lädt sie die 2te DLL auch dazu.
-
Danke für die Erklärung, user.
Und wie kann ich die LIB in Microsofts Express Edition 2005 linken?
Ich bekomme das nicht hin und finde auch keine passende Anleitung...Kann mir jemand das verständlich erklären?
Wäre klasse.Gruß
-
in den projekteinstellungen, dort wo die einstellungen für release und debug version vorgenommen werden, in der kategorie für den "linker" den dateinamen der *.lib eintragen.