Dll funktioniert, aber möchte es flexibel gestalten



  • Servus,
    ich habe nach Anleitung von tut, eine Dll erstellt, von der ich Daten bekomme und sie umschreiben kann. Ich habe dazu in den Projekteinstellungen/Linker in Objekt-/Bibliothek-Module meineDll.lib reingeschrieben, und die eigentliche "Dll.dll" in den ReleaseOrdner zu der exe gesteckt. Das funktioniert ja auch soweit super. 😃 endlich mal was geklappt^^

    Jetzt wollte ich das ganze flexibler gestalten, kann ich die Dll, weil es später vielleicht mal mehr geben wird, auch während die Exe läuft, dazuladen?

    Habe in meinem Prog, dort wo ich die exe brauche

    LoadLibrary (meineDll);
    

    eingefügt und die "originalDll" aus dem Release-Ordner rausgelöscht, weil die will ich ja flexible einbinden lassen. Jetzt kommt die Fehlermeldung, keine Dll vorhanden und er beendet die exe...

    muss da in:Projekteinstellungen/Linker in Objekt-/Bibliothek-Module meineDll.lib auch was geändert werden????

    kann mir jemand dazu was sagen 😕 ,

    dankeschön Ralf



  • schau mal hier
    Does it help ?



  • hast du es denn jetzt zum laufen gebracht????

    werde es mal ausprobieren



  • Ja, jetzt geht alles.
    Wenn du doch Probleme hast melde dich.
    Ich glaub bei mir lag es damals nur an
    einem total verstümmeltem Projekt 😃

    Aber deine DLL muss natürlich schon irgendwo vorhanden sein.
    Packe sie mit in den Ordner der Exe !
    Alternativ den Pfad zur DLL mit angeben beim dynamischen laden.

    Gruß
    Chris



  • 😡
    sry, aber ich verstehe dass nicht...
    habe meine version von der festeingebundenen dll jetzt versucht umzubauen, und es mit dem link von dir probiert, es kommt bei mir eben falls keine messagebox... habe es auch mit typedef int __stdcall usw versucht, so langsam glaube ich, dass meine dll verkehrt ist

    wie hattest du es denn geschafft, dass die messagebox angezeigt wird?



  • nochmal von vorne 😞

    ich habe von meinem programm aus den projekteinstellungen/linker die festeingegebe lib: MYFirstdll.lib rausgenommen.
    und alle fehlermeldungen erstmal rausgestrichen...

    dann an dem punkt, wo ich die aussenstehende dll benötige, habe ich mit loadlibrary, die dll geladen->dieses passiert auch 😃

    wenn ich jetzt jedoch meine ausgabe wieder mit reinnehme:

    m_Result=Multipla(m_ParamOne,m_ParamTwo);
    

    kommt die fehlermeldung:
    *AlgoPara.obj : error LNK2001: Nichtaufgelöstes externes Symbol " __declspec(dllimport) int __cdecl Multiply(int,int)" (_imp_?Multiply@@YAHHHHHHHHHHHHHHHHHHHHHHH@Z)

    Release/Test.exe : fatal error lnk 1120 : 1 unaufgelöste externe Verweise*

    deklariert ist das in einer 2ten*.h
    Imports.h

    #define DLLIMPORT __declspec(dllimport)
    
    DLLIMPORT int Multiply(int ParaOne,int ParaTwo);
    

    hilfe, kann mir jemand dazu was sagen 😕



  • sry, für rechtschreibfehler... aber leider muss ich quelltext per hand eingeben



  • hab mir nen wolf gegoogelt, und das hier gefunden:

    **In "Projekteinstellungen (Alt+F7)", Reiter "Linker", "Objekt/Bibliothek-Module"
    <Pfad>Datei.lib anfügen.
    **

    wenn ich das machen, funktioniert es ja auch, aber die dll wird gleich beim Start der exe geladen... was ich jedoch nicht will 🤡 deswegen hatte ich es ja aus dem linker rausgelöscht

    HILFE 😕

    damit mir ein 💡 aufgeht

    danke



  • Du musst GetProcAddress den Namen der Funktion in deiner DLL übergeben.
    Zurück kommt ein Zeiger auf die Funktion in der DLL. Dieser Zeigername ist aber nicht der Name der Funktion siondern des typesdef den du vielleicht gemacht hast.

    In der MSDN steht was du genau zurückbekommst.


Anmelden zum Antworten