[Suche]Tutorial für eigene dlls
-
Hallo
Also ich bastel im Moment an einem kleinen Projekt, bei dem ich später mehrere exe-Dateien habe. zB eine als eine Art Editor für Dateien und eine andere, die mit den Daten dieser Dateien arbeitet, die Dateien aber selbst nicht verändern darf.
Jetzt hab ich mir bereits eine Klasse geschrieben, die für den Zugriff auf diese Dateien zuständig ist. Nun wär es natürlich unnötig, diese Klasse in beide exe-Dateien mit zu kompilieren. Wenn mich mein Gedächtnis über das, was ich so gelesen hab, nicht ganz täuscht, dann könnte ich aus dieser Klasse doch besser eine dll machen, die später von beiden exe-Dateien eingebunden wird, oder nicht?Nun, dass Problem ist, ich habe noch nie mit dlls gearbeitet und weiß nicht so richtig, wie ich sie richtig erstelle und wie ich sie später einbinde. Deswegen suche ich ein gutes Tutorial dazu.
Habs schon hier im Forum und auch unter Google versucht. Allerdings hab ich dort leider größtenteils nur Forenbeiträge gefunden, indem dann nur ein kleiner Teil einer dll erklärt oder behandelt wurde, was für mich dann ziemlich nach Bahnhof klang -.-Naja, ich hoffe ihr könnt mir weiterhelfen
Danke schonmal!/edit: fast vergessen *G* Visual C++ 6.0 unter Windoof XP... hm, wenn sonst noch Infos nötig sind: fragen

-
http://bcb-tutorial.c-plusplus.net/DLL_Tutorial/index.html
ist zwar ein builder tutorial aber das is denk ich ziemlich allgemein - sollte also auch vc funktionieren.
-
danke
ich werds mal durchlesen und wenns dann nicht klappt oder noch fragen sind, meld ich mich wieder hier 
-
hm... werd daraus nicht so wirklich schlau, bzw kommt mir komisch vor ?
Also ich musste vor einiger Zeit schonmal eine dll einbinden nach einer Anleitung. Und da reichte es, in den Projekteinstellungen irgendwo Pfad der dll bekannt zugeben und sie irgendwo bei Projekt -> Einstellungen einzutragen. Dann brauchte man nurnoch bei dem Proejekt #include "name.h" oder so eintragen, und schon war sie hinzugefügt.
In dem Tut wird die dll mit irgendwelchen Aufrufen immer extra geöffnet und wieder geschlossen usw. Evtl kann mir jemand sagen, nach welcher Methode ich das damals gemacht hab? Leider ist die Seite mittlerweile unauffindbar.Wie gesagt, es mussten nur ein paar Einträge in dem Projekteinstellungen vorgenommen werden und danach konnte man sie wie eine gewöhnliche header-Datei einfügen.
-
Bei DLLs gibt's zwei Methoden.
Du kannst sie statisch linken oder dynamisch laden.Statisch Linken ist, wenn du den Pfad zur DLL dem Compilir mitgibtst und dann die .h inkludierst.
Dynamisch Laden ist, wenn du jedesmal wenn du eine Funktion aus der DLL brauchst, diese so lädst:HINSTANCE hDll = LoadLibrary("Super.dll"); if(!hDll) return; // analog zur Funktion int NAME(CString); in der DLL typedef (int)(CALLBACK* fptr)(CString); fptr funktion = GetProcAddr(hDll, "NAME"); if(!funktion) return; int nRet = funktion("hallo");Statisch Linken ist gut, wenn du sehr viele Funktionen aus dieser DLL oft brauchst.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hehejo schrieb:
Bei DLLs gibt's zwei Methoden.
Du kannst sie statisch linken oder dynamisch laden.Statisch Linken ist, wenn du den Pfad zur DLL dem Compilir mitgibtst und dann die .h inkludierst.
Dynamisch Laden ist, wenn du jedesmal wenn du eine Funktion aus der DLL brauchst, diese so lädst:HINSTANCE hDll = LoadLibrary("Super.dll"); if(!hDll) return; // analog zur Funktion int NAME(CString); in der DLL typedef (int)(CALLBACK* fptr)(CString); fptr funktion = GetProcAddr(hDll, "NAME"); if(!funktion) return; int nRet = funktion("hallo");Statisch Linken ist gut, wenn du sehr viele Funktionen aus dieser DLL oft brauchst.
Das klingt für mich etwas missverständlich:
- statisch: Die Verbindung wird zur Compilezeit hergestellt. Dabei wird neben Header-Datei auch noch die Lib-Datei benötigt
- dynamisch: Die Verbindung wird vollständig zur Laufzeit hergestellt. Insbesondere erhälst du erst zur Laufzeit Feedback ob die gesuchte Funktion mit der von dir angegebenen Signatur wirklich in der DLL vorhanden ist.Der einzige Vorteil von statischem Linken besteht darin, das du Abhängigkeiten zu den DLLs minimieren kannst, was den Prozess der Weitergabe inklusive Versionsproblematik erleichtern kann.
Auch beim dynamischen linken lädt man die DLL mit LoadLibrary() üblicherweise nur einmal und nicht bei jedem Funktionsaufruf neu.
-
Hi! Ich habe eine kleine Anleitung für MFC-dlls geschrieben.
http://gayfiles.de/tutorials/UnterprojektDLL.doc
Vielleicht hilft die ja.
-
gayfiles?? ESTARTU

verlink es doch bitte so:
SO
was wirft das sonst für ein Bild auf dich??

-
Da war jemand so lieb und hat das für mich hochgeladen.

Mein Server klemmt gerade und außerdem hab ich da nix mit (stört mich nicht). :pWas für ein Bild soll das denn werfen? Schwule Frauen gibt es nicht.

-
Juhu Fettes Brot lässt grüssen!
[sing]Schwule Mädchen Sonder einsatz schwule Mädchen Kampfeinsatz schwule Mädchen an jeder Ecke schwule Mädchen in deiner Stadt ... [/sing]
-
o0, neuer Rechner und noch kein Word drauf. Muss ich jetzt erstmal draufpacken um die Datei richtig lesen zu können
Aber ich bedanke mich jetzt schonmal für die Anleitung und für eure Hilfe 
Ich werd das ganze wohl statisch linken.
-
HI!
Mein Server geht gerade so halbwegs und da habe ich es als HTML:
http://www.larsaf-iii.de/forum/cpp/Dll_machen.htm

-
danke

So, ich hab ein bißchen hin und her probiert. Mein Problem ist, dass ich in den Projekteinstellungen nur das Feld "Erzeugt keine .LIB" gefunden hab. ABer weder mit Haken drinnen noch draußen erzeugt er mir eine .LIB. Die fehlt immer
Naja, ich such einfach mal weiter nach Einstellungen 
Ne 2. Frage: Ich muss ja bei der statischen Einbindung den Pfad der dll angeben. Wenn ich das Programm jetzt allerdings einem Freund schicken will, dann "installiert" er es ja nicht unbedingt im gleichen Ordner. Gibts da einen Trick? zB findet er die dll automatisch auch ohne Pfadangabe, wenn sie im selben Ordner wie die exe ist? Oder muss ich dann die dll in ein schon bekanntes Verzeichniss, wie zB in den Windows-Ordner kopieren?
-
Der findet die automatisch, wenn sie im selben Ordner oder in einem Systemordner (System32 oder so) ist. Es wird übrigens immer zuerst im aktuellen Verzeichnis und dann erst im "Path" gesucht.
Auf dem Bild siehst du, wo du den Pfad eingeben musst, damit die dll gleich bei der Exe landet. So mache ich das.

Dann muss man das Programm nur von A nach B kopieren und es läuft.
(Denk daran, immer nur die Release-Version wegzugeben.)
-
also mir hat der link ganz gut geholfen
-
http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api6.htm
könnte auch helfen
-
estartu_de + Polofreak == :):)
-
hatte länger kein internet, wollte nur mal sagen das ich auch nicht schwul bin ^^

-
@RedSkall: na dann schließt sich der Kreis ja nun! Du warst nicht namentlich erwähnt worden!
