Library in Visual Studio 2005 erstellen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Library in Visual Studio 2005 erstellen

    Ich soll eine Bibliothek erstellen, in der ich alle Funktionen sammle, die ich so in laufe der Zeit immer wieder brauche. (Schulaufgabe)
    Die header Datei habe ich schon in das richtige Verzeichniss kopiert (...\VC\include).

    Wie aber erstelle ich eine *.lib, sodass ich nur die header include und die bestimmte Funktion benutzen kann, ohne sie ins Projektverzeichnis aufnehmen zu müssen?
    Oder verstehe ich da etwas grundlegend falsch?

    Gruß
    Martin
  • Wikipedia bietet hier einige Infos [wikipedia]Dynamic_Link_Library[/wikipedia]

    Hier mal eine schnelle Zusammenfassung mit Beispielen.

    Zuerst die DLL und LIB erstellen. Beim kompilieren des folgenden Beispiels, werden mit VC die erfoderlichen Dateien erstellt:

    Quellcode

    1. #if defined(_MSC_VER)
    2. #include <windows.h>
    3. #define DLL extern "C" __declspec(dllexport)
    4. #else
    5. #define DLL
    6. #endif
    7. // nur unter MS VC das Symbol DLL definieren; z.B. unter Linux wird DLL ignoriert
    8. // Die Funktion, die anderen Programmen zur Verfügung gestellt werden soll
    9. // (in diesem Beispiel: Addieren zweier Zahlen)
    10. DLL double AddNumbers (double a, double b) {
    11. return a + b;
    12. }
    Alles anzeigen


    Schließlich kann man die DLL auf zwei Arten einbinden.
    1) Man bindet die DLL beim Programmstart ein, oder
    2) man bindet die DLL während der Laufzeit des Programms ein.

    1) Funktion bei Programmstart einbinden mit __declspec(dllimport):

    Quellcode

    1. #include <windows.h>
    2. #include <stdio.h>
    3. // Importieren der Funktion aus der oben erstellten DLL
    4. extern "C" __declspec(dllimport)double AddNumbers (double a, double b);
    5. int main () {
    6. // Aufrufen der externen Funktion
    7. double result = AddNumbers(1, 2);
    8. printf("Das Ergebnis ist: %f\n", result);
    9. return 0;
    10. }
    Alles anzeigen


    2) Man bindet die DLL während der Laufzeit ein und nutzt die Funktionen LoadLibrary, GetProcAddress und schließlich FreeLibrary:

    Quellcode

    1. #include <windows.h>
    2. #include <stdio.h>
    3. // Definition der DLL-Funktion, die verwendet werden soll
    4. typedef double (*AddNumbers)(double, double);
    5. int main () {
    6. AddNumbers function;
    7. double result;
    8. // DLL Datei laden
    9. HINSTANCE hinstLib = LoadLibrary("MyDll.dll");
    10. if (hinstLib) {
    11. // Die Einsprungadresse abfragen
    12. function = (AddNumbers) GetProcAddress(hinstLib, "AddNumbers");
    13. // Die Funktion aufrufen
    14. if (function)
    15. result = (*function) (1,2);
    16. // Die DLL-Datei wieder entladen
    17. BOOL fFreeResult = FreeLibrary(hinstLib);
    18. }
    19. // Das Ergebnis anzeigen
    20. if (!hinstLib || !function)
    21. printf("Fehler: Konnte die Funktion nicht aufrufen\n");
    22. else
    23. printf("Das Ergebnis ist: %f\n", result);
    24. return 0;
    25. }
    Alles anzeigen



    Die DLL muss sich im Verzeichnis des Programms befinden.
    Sobald die angeforderte DLL nicht vorhanden ist, wird dein OS eine Fehlermeldung ausgeben und das Programm beenden. Der Vorteil biem Einbinden während der Laufzeit ist, dass der Programmierer ggf. Ausnahmen abfangen kann um derartige Programmabstürze zu unterbinden.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Blue ()

  • Danke für die ausführliche Antwort und den Link.
    Ich hätte nun eine Variante mit weniger "Schreibarbeit" erwartet.

    In der Verion 6 des VIsual Studio funktioniert das wohl so, dass man
    - die header Datei in das Verzeichnis "...\Microsoft Visual Studio}VC98\include" kopiert
    - Ein neues Projekt anlegt: WIn32 Static Library
    - Quellcode Datei(en) mit den Funktionsdefinitionen einfügt
    - Projekt erstellt - somit die *.lib erstellt

    - Die .lib Datei muss man dann nur noch in aus dem Projektverzecihnis in das Verzeichnis"...\...\VC98\lib" kopieren und dem Linker bescheid geben.

    So einen Weg muss es doch auch in Visual Studio 8 geben.

    Deine Antworten werde ich mir selbstverständlich trotzdem mal zu Gemüte ziehen.

    Gruß
    Martin