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
hallo also hast du beim linker die dll auch angegeben? - hast du vielleicht ein passendes header (.h) file für die library? lg andi
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...)
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).
@Stefan: Warum schreibst du nicht einfach, wie man das (bzw. beide Möglichkeiten) beim DEVcpp realisiert?!
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.