DLL + LIB



  • Hallo,
    ich habe eine Frage und zwar:

    Wenn ich eine DLL erstelle (klappt einwandfrei) und das auch dann in mein Programm lade

    #include "mydll.h"
    
    typedef int*(*ploadfunc)();
    
    HINSTANCE m_hDLL = LoadLibrary("mydll.dll");
    ploadfunc pFunktion = (ploadfunc)GetProcAddress(m_hDLL, "Funktion");
    
    int* p = Funktion();
    

    klappt alles wunderbar:
    - dll wird geladen
    - funktionszeiger auf die Funktion gespeichert
    - über diesen Zeiger die Funktion aufgerufen

    Die eigentlich Frage ist:
    - wenn ich meine DLL erstelle, wird zusätzlich zu der DLL noch eine LIB erstellt, wozu ist die überhaupt da ? auf meine DLL kann ich ja so zugreifen
    - ist es möglich mit hilfe von dieser LIB irgnedwie das laden der DLL uz vereinfachen ?

    ein kleiner codeschnippsel wäre super

    mfg



  • #pragma comment ( lib, "mydll.lib" )

    oder über den Compiler einbinden.



  • Mit Hilfe der .lib kannst du die DLL implizit linken: dabei wird die DLL zum Programmstart geladen, und die in der LIB enthaltenen Funktionen auf die DLL "umgebogen".

    So kannst du an einen Entwickler .h, .lib und .dll ausliefern, der kann dein DLL benutzen als wäre es eine LIB (geht compiler-übergreifend aber nur für reine C API). Der Endanwender braucht nur die DLL.



  • mmm schrieb:

    #pragma comment ( lib, "mydll.lib" )

    oder über den Compiler einbinden.

    danke mmm, aber ich weiss schon wie man eine lib einbindet, die frage war anders 🙂

    peterchen schrieb:

    Mit Hilfe der .lib kannst du die DLL implizit linken: dabei wird die DLL zum Programmstart geladen, und die in der LIB enthaltenen Funktionen auf die DLL "umgebogen".

    So kannst du an einen Entwickler .h, .lib und .dll ausliefern, der kann dein DLL benutzen als wäre es eine LIB (geht compiler-übergreifend aber nur für reine C API). Der Endanwender braucht nur die DLL.

    also meinst du, ich brauche den code von oben zum laden der dll nicht schreiben, sondern nur die lib, die mit der dll miterstellt wird, einfach in code einbinden (z.b. mit pragma comment(...) ),
    und dann auf die funktionen der dll ganz normal zugreifen
    z.b. int *p = Funktion();

    und dabei verhält sich trotzdem das ganze wie normale dll, also von eigenschaften her ? (die lib macht für mich NUR intern diese ladegeschichte ? und keine nebenwirkungen 🙂 )



  • Nein so einfach ist das auch nicht auch wenn es einfacher ist als zur Laufzeit.
    Da du die DLL zur Laufzeit lädts kennst du ja deine Funktionen in der DLL.
    Die Methoden stehen auch in der Header drin.
    du musst nur deine Header includen. dadurch kannst du auf die funktionen in der Bib. zugreifen. Um diese Funktionen auch zu finden brauchst du die lib welche du einfach mitlinkst.
    Ich schreibe diesen pragma immer gleich in meine header der Bib. da kann ich dann einenn linkerfehler ausschließen.


Anmelden zum Antworten