Funktionen aus DLL benutzen



  • Hallo liebe cplusplus-Community,

    nachdem ich in C nun in den Grundlagen einigermaßen fit bin, wollte ich mich mit dem Thema DLL näher befassen.
    ...und ja, dazu hätte ich ein paar kleinere Fragen.

    Kann man generell jede DLL- Datei bzw. ihre Funktionen in einem C Programm nutzen oder geht das nur mit C++?

    Ist immer eine entsprechende .LIB und ein Headerfile erforderlich um darauf zuzugreifen, oder reicht es die genaue Signatur der Funktionen zu kennen und à la

    extern "C" int __declspec (dllimport) func1(int para1,int para2);
    

    darauf zuzugreifen, wenn sich die 'test.dll' im selben verzeichnis befindet?

    Ich würd das gerne mit dem GNU C Compiler machen, ist das möglich?

    ...wäre sehr dankbar, wenn mir jemand ein paar aufschlussreiche Antworten geben könnte, um Licht ins Dunkel zu bringen.

    Grüße, Heinzelmann



  • Kann man generell jede DLL- Datei bzw. ihre Funktionen in einem C Programm nutzen oder geht das nur mit C++?

    Es kommt drauf an. Und zwar darauf wie die Funktion exportiert wurde, mit welchem Kompiler die LIB bzw. DLL erzeugt wurde und für welche Platform die Files erzeugt wurden.

    Das ist keine einfache Geschichte.
    Einfach gesagt ist die Verwendung von DLL's in EXE's möglich wenn sie mit dem gleichen (auch die Version) Kompiler erzeugt wurden. Als C- exportierte Funktionen können i.d.R. mit C++ genutzt werden.

    Andere Kombinationen sind möglich (Sprach-, Kompiler- und Platform- Kompatibiltät).
    Im Buch Imperfect C++ kann es nachgelesen werden.

    Ist immer eine entsprechende .LIB und ein Headerfile erforderlich um darauf zuzugreifen, oder reicht es die genaue Signatur der Funktionen zu kennen und à la

    extern "C" int __declspec (dllimport) func1(int para1,int para2);
    

    darauf zuzugreifen?

    3- Wege sind möglich:
    1. statisches Linken (nur Header und LIB ist nötig)
    2. dynamisches Linken (Header, LIB und DLL ist nötig)
    3. dynamisches Laden (Header, DLL sind nötig)

    (Header liefert die Signatur während der Kompilier- Zeit, LIB ist die Impl. zur Link- Zeit und DLL die Impl. zur Lauf- Zeit)

    wenn sich die 'test.dll' im selben verzeichnis befindet

    Das ist nicht zwingend nötig und hängt von der jeweiligen Platform ab. Bei Version 3. kannst Du den Pfad beim Laden angeben (relative od. absolut).

    Ich würd das gerne mit dem GNU C Compiler machen, ist das möglich?

    Ja, das ist möglich.
    http://www.cygwin.com/cygwin-ug-net/programming.html

    Das Tool Dependency Walker kann ich Dir sehr empfehlen. Dort sind unter anderem die exportierten Namen einer DLL und zusätzliche Abhängigkeiten ersichtlich.
    http://www.dependencywalker.com/

    Die Erklärungen von sind sind für Windows Formuliert, gelten jedoch in ähnlicher Weise auch für andere Platformen.

    Gruss Simon



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielen Dank für die Info.

    Ich werd mich in das Thema mal ein wenig einlesen.

    Grüße


Anmelden zum Antworten