Lib's und DLL's



  • Tja eben da liegt das Problem. Ich hab mal schnell eine SoundDll gemacht, welche auf Fmod bassiert, also ein kleiner Warpper.

    So sieht mein Testprgramm aus:

    #pragma comment(lib, "SoundDll.lib")
    
    #include "n_soundsystem.h"
    
    int main()
    {
        return 0;
    }
    

    und die Fehler bekomm ich:
    Linker-Vorgang läuft...
    Bibliothek Release/Testprogramm.lib und Objekt Release/Testprogramm.exp wird erstellt
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_GetCPUUsage@0
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_GetError@0
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_Update@0
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_GetNumTracks@4
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_GetTrack@4
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_GetTrackLength@8
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_GetVolume@4
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_SetPaused@8
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_SetVolume@8
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_Play@8
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_Stop@4
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol _FSOUND_CD_Eject@4

    Tja.. hier ein Ausschnitt aus der Dll:
    soundsystem.h

    #pragma comment(lib, "fmodvc.lib")
    
    #include "fmod.h"
    #include "fmod_errors.h"    // optional 
    ...
    

    Tja... wenn ihr wollt, kann ich mal den Source hochladen...

    Danke, Christian



  • das #pragma comment(lib, "fmodvc.lib") muss ins Testprogramm, also in den Quellcode der EXE und nicht der DLL



  • Dann braucht der/die Entwickler, die mit meiner Dll arbeiten die ganzen verwendeten Libs auch. Und genau das will ich nicht! Die Libs sollen alle irgendwie in die Dll hingebracht werden.

    Du brauchst kein DirectX SDK dazu, weil du fmod ja nicht kompilierst.

    Genau... wenn ich jetzt aber z.B.: DirectX für Input verwenden will, dann muss ich ja #pragma comment(lib, "dinput.lib") ins Testprogramm/fertige Anwendung und schon muss ich meiner Dll alle libs mitliefern.

    Also so kann es doch nicht gehen, oder?



  • Dann braucht der/die Entwickler, die mit meiner Dll arbeiten die ganzen verwendeten Libs auch. Und genau das will ich nicht!

    Läßt sich aber nicht verhindern. :p
    Außer du hast den Code der fmod dll.



  • Dann schließe ich daraus, dass das Fmod-Team den Source der DirectX Soundroutinen hat.

    Irgendwas stimmt da doch nicht...



  • tschuldigung, dann hab ich wohl unrecht. 🙂



  • Wer weiß, vielleicht habe ich auch unrecht und will einfach mein Problem lösen.



  • Die einzige Möglichkeit, die ich sehe ist, die DLLs als Resource einzubinden.



  • Von Anfang an:
    Du hast eine DLL geschrieben welche Funktionen aus anderen DLL`s braucht.

    Dann musst du die Libs der DLL mit linken.

    Nun wird die Lib in einem Programm gebraucht.
    Da brauchst du die anderen lib nicht mehr. Lediglich dann zur Ausführung werden die DLL`s benötigt.
    Ein pragma comment(
    ist der falsche weg außer man definiert noch einige defines da man ja im Normalfall die gleiche header für den Import und Export verwenden will.

    Wenn das bei dir nicht funktioniert dann machst du etwas anderes falsch.
    Wers nicht glaubt:
    Siehe meine HP.
    Dort gibt es auch eine DLL welche jedoch wieder die MYSQL-DLL einbindet. und da brauchst du die Lib auch nicht.



  • ich denk mal, das problem was er hat, ist nen klein wenig anders 😃
    Er hat die DLL, die Lib's sind dazu gelinkt, in seinem Programm aber included er die header von den LIB's und ruft die funktionen in den Libs auf ???
    Das funktioniert, glaub ich, auch nach nem LoadLibary nicht 🙂

    Also, du musst, wenn du die FUnktionen in den statischen Libs ueber ne DLL einbinden willst, die Funktionen durch die DLL "durchschleifen" ....
    Sprich, deine Lib hat ne Funktion int "PlaySound()", dann schreib fuer deine DLL eine Funktion "int PlaySoundA(){return PlaySound();};" und verwende die Funktion PlaySoundA() in deinem executiable

    Ciao ...



  • Ich lade heute noch mal meine Testdll inc. Testprgamm,.. hoch...



  • Hier: http://www.visual-page.de/SoundDll.zip

    Also ich hab da mal schnell was zusammengebastelt...

    Christian


Anmelden zum Antworten