Forum: PC-Programmierung DLL in DevCpp einbinden


von Rupplyn (Gast)


Lesenswert?

Hallo zusammen,

bin eigentlich VB-Programmierer und schlag mich grad mit cpp rum. möchte 
ne DLL in ein DevCpp-Projekt hinzufügen.

Hab dazu diverse Codeschnipsel gefunden, z.B.:
extern "C" __declspec(dllimport)void Pruefsumme (char *tmp_string);

Der Linker schmeißt mir ne Meldung raus, dass er die Funktion nicht 
kennt...
in VB muss ich immer den Pfad/Name der DLL mit angeben.

Wie mache ich das in cpp? oder ist der ganze Ansatz mit dllimport 
bullshit?

Gruß Rupplyn

von andreas kasper (Gast)


Lesenswert?

hallo

also hast du beim linker die dll auch angegeben? - hast du vielleicht 
ein passendes header (.h) file für die library?

lg
andi

von Rupplyn (Gast)


Lesenswert?

ein header-file habe ich nicht...
wo gebe ich dem linker den die dll datei an?
ich habe den pfad unter compiler-optionen->verzeichnisse->bibliotheken 
hinzugefügt. (explizit die datei habe ich dem linker also nicht 
mitgeteilt...)

von Stefan (Gast)


Lesenswert?

Vielleicht schreibst du noch genauer was du machen willst. Willst du 
eine eigene DLL machen und in eigenen Programmen benutzen oder willst du 
eine fremde DLL in eigenen Programmen benutzen?

Du kannst DLLs implizit und explizit in Programmen einbinden.

Bei der  impliziten Methode kümmert sich das OS beim Programmstart um 
das Laden der DLL. Dafür muss im Programm stehen, welche DLL benötigt 
wird und wohin die DLL-Aufrufe gehen. Diese Information kann der Linker 
in das Programm einbinden, wenn der Linker seinerseits Infos hat, wie 
die DLL aufgebaut ist. Bei fremden DLLs geben die Programmierer daher 
diese Infos als Headerdateien (Funktionsaufrufe) und sog. 
EXPORTS-Dateien mit.

Bei der expliziten Methode ist die DLL dem OS egal. Du kümmerst dich 
beim Programmlauf um das Laden der DLL (LoadLibrary()) und um die 
Sprungadressen zu den Funktionen (GetProcAddress()). Natürlich musst du 
wissen welche Funktionen es gibt und wie sie aufzurufen sind 
(Parameteranzahl, Typ, Aufrufreihenfolge).

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

@Stefan:
Warum schreibst du nicht einfach, wie man das (bzw. beide Möglichkeiten) 
beim DEVcpp realisiert?!

von Stefan (Gast)


Lesenswert?

Ich sehe ein Forum als Weg an jemanden auf eine Spur zu schicken oder um 
konkrete Problemen zu lösen.

Letzteres geht bisher nicht, da ich nicht weiss, was konkret gemacht 
werden soll.

Deine Anregung kann ich nicht im Moment aufgreifen, weil nicht soviel 
Zeit investieren will, um das Lehrbuch-/Tutorialmässig so gut zu 
beschreiben, wie es massenhaft im Netz oder in jedem C Buch für 
Windowsprogrammierung zu finden ist.

von Andreas W. (Firma: andreas-weschenfelder.de.vu) (rupplyn) Benutzerseite


Lesenswert?

dll's geschrieben habe ich bereits selbst; ist nicht das problem.

ich möchte eine dll von der ich die funktionsdeklarationen kenne in mein 
projekt einbinden.
verwenden könnte ich also die implizite oder explizite variante. welche 
ist den vorteilig?

von Stefan (Gast)


Lesenswert?

Bei der impliziten Methode brauchst du im Programm nicht mit 
Funktionspointern zu arbeiten. Du kannst die DLL-Funktionen wie normale 
Libraryfunktionen oder Programmfunktionen aufrufen. Fehlt eine DLL 
knallt es direkt bei Programmstart, wenn alle Abhängigkeiten aufgelöst 
werden. Und es kann ein Pain in the A** sein, einen fremden Linker zum 
Linken einer Exportsdatei für eine fremde DLL zu überreden 
(Beitrag "Velleman K8055 und Cygwin GCC..."). Wenn ein Update der 
fremden DLL mit geänderter Funktionsreihenfolge rauskommt (eingefügte 
Zusatzfunktionen...), ist es sehr wahrscheinlich, dass du nachziehen 
musst.

Bei der expliziten Methode kannst du zur Laufzeit selbst auf eine 
fehlende Library reagieren z.B. ggf. die Teilfunktionen deines 
Programmes auslassen. Und du kannst eine Teilfunktionalität deines 
Programms per DLL gezielt aus dem Speicher rein- und rausladen z.B. 
einmal die Druckfunktionen reinholen und das andere Mal die 
MP3-Playerfunktionen... Hier ist ein Update einer  fremden DLL weniger 
kritisch, selbst wenn die Funktionsreihenfolge wechselt. Nur die Namen 
und Argumente dürfen sich nicht ändern.

Ich bevorzuge, wenn es geht, die explizite Methode.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.