dll einbinden?



  • Hallo :)!

    Ich versuche eine ganz simple Anwendung mit dem VS 2005 Express zu compilieren.
    Ich nutze Funktionen aus einer "bar.lib", welche ich aber angegeben habe, d.h. das ganze wird fehlerfrei compiliert und gelinkt.

    Nun entsteht aber merkwürdigerweise keine exe, sondern so etwas wie:

    foo.exe.embed.manifest
    foo.exe.intermediate.manifest

    Ich sehe so etwas zum ersten Mal. Drücke ich innerhalb der VS-IDE F5 kann das Ganze irgendwie auch gestartet werden (aber erst nachdem ich in meinen WinNT-Ordner die "bar.dll" abgelegt hatte).

    Wie bekomme ich eine wirkliche executable zustande?!



  • der thread hat nix mit c++ zutun, gehört also ins WinAPI oder ins Compilerfourm...

    mfg blan



  • Wenn du eine DLL hast sollte es ziemlich schwierig werden diese statisch zu deiner Exe dazuzulinken.
    😃

    Das ist so wie wenn man fragen würde wie kriege ich es hin mit Vorwärstgang rückwärts zu fahren.

    Deine bar.lib darf keine Dll sein, sondern muss als statisch Lib übersetzt werden.



  • Wie muss ich denn jetzt genau vorgehen?
    Ich habe ein Projekt, welches eine bar.lib und eine bar.dll generiert.

    Dann habe ich mein Programm, welches die bar.lib benötigt, dadurch gelinkt werden kann, aber es wird keine exe erstellt. Durch die IDE kann es zwar gestartet werden, benötigt aber im Debugordner des Projekts die bar.dll

    Ich weiß nicht genau was ich jetzt ändern soll ?
    💡



  • Die Einstellungen im Projekt bar. Der Compiler übersetzt dieses in eine dll. Du benötigst dagegen eine statische Lib um dein Programm unabhängig von der Dll-Datei zu machen.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Compiler-Forum verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Die exe Datei muss schon irgendwo vorhanden sein. (In deinem Projektordner müsste es einen Verzeichnis "Debug", "Release" oder ähnlich geben, wo die drin sein sollte).

    Die bar.lib ist wohl eine sog. Importbibliothek, und macht im Prinzip nix anderes, als
    dass sie die Funktionen der Dll automatisch beim Programmstart lädt.
    Das hat halt den Vorteil, dass man die Funktionen der Dll ohne zusätzliche Schreibarbeit
    (LoadLibrary() etc.) nutzen kann.
    Schaut dann aus, als wäre die Dll statisch eingebunden.

    Dass das ganze aber funktioniert, muss das einbindende Programm die Dll auch finden. Dabei werden alle Verzeichnisse durchsucht, die in der PATH-Umgebungsvariablen vorhanden sind.
    Ausserdem noch das Verzeichnis, in dem die exe Datei drinnen liegt.

    Wenn das Prog über F5 gestartet wird verschiebt sich das ganze allerdings etwas und die Dll wird nich im Verzeichnis der Exe-Datei gesucht sondern in dem Verzeichnis, in dem die *.vcproj liegt.

    Mag gut sein, dass man das auch ändern kann, aber standardmäßig ist das zumindest bei mir so der Fall.



  • Ja vielen Dank! Es wurde tatsächlich auch eine exe erstellt (aber nicht dort, wo sie sonst immer liegt...)

    Jetzt weiß ich bescheid 👍


Anmelden zum Antworten