Selbstgeschriebene DLL einbinden funzt nicht :(



  • Möglichkeiten gibt es derer viele.

    Wenn man dem armen Drops schon LoadLibrary vor die Füsse wirft, dann doch auch gleich GetProcadress. Kann ja nicht so schwer sein.

    Ausserdem kann man natürlich auch die die DLL linken. Soll heissen, du bindest in Deinem Projekt die Datei lib.lib mit ein. Wie das funktioniert, hängt ganz von der verwendeten GDI ab (Die Hilfe kann Dir sicher helfen).

    Gruß André



  • Du solltest die Definition Deines Funktionspointers prüfen.
    Der muss wohl so lauten:
    typedef void (CALLBACK* LPFNDLLFUNC1)(void);

    Gruß André



  • Wie bekomm ich denn die lib.lib?

    Danke



  • wird afaik beim Erstellen der Dll miterstellt



  • Die findest Du im Debug oder Release Verzeichnis Deines Projektes.
    Im Zweifelsfall findet Du sie mit der Suchenfunktion des Win-Explorers. 😉

    Gruß André



  • ; dlltool --base-file C:\DOKUME1\Root\LOKALE1\Temp/cca02660.base --output-exp lib.exp --dllname lib.dll --output-def liblib.def --no-export-all-symbols --add-stdcall-alias --exclude-symbol=DllMainCRTStartup@12 --def C:\DOKUME1\Root\LOKALE1\Temp/cca02660.def --output-lib liblib.a
    EXPORTS
    Funktion@0 @ 1
    Funktion = Funktion@0 @ 2

    DES?
    Des heißt aber liblib.def 😮

    Mr.DLL



  • So sorry wegen Doppelpost aber wenns liblib.def ist wie kann ich des mit einbinden?
    Schon mal Danke vorallem an av_privat 🙂

    Mr.DLL



  • hmm, die DEF-Datei ist aber nicht das richtige.
    Eher das Ende: --output-lib liblib.a
    Das scheint erfolgsversprechender zu sein. Allerdings muss das schon .lib am Ende haben. Ich habe leider keine Ahnung, wie das in der Entwicklungsumgebung funktioniert (zumindest scheint es kein Visual Studio zu sein). Da solltest Du mal das Handbuch oder die Hilfe konsultieren.

    Andere Frage: Hat denn nun das GetProcadress funktioniert? Dann musst Du nicht mehr die Lib linken (eins von beidem reicht).

    Gruß André



  • aaalso:
    hier ein bisschen beispiel-code (stammt nicht von mir wie man sieht, läuft aber bei mir):

    hinstLib = LoadLibrary(TEXT("Projekt1.dll")); 
    
                    // If the handle is valid, try to get the function address.
    
                    if (hinstLib != NULL) 
                    { 
                        ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("myputs")); 
    
                        // If the function address is valid, call the function.
    
                        if (NULL != ProcAdd) 
                        {
                            fRunTimeLinkSuccess = TRUE;
                            (ProcAdd) (); 
                        }
    
                        // Free the DLL module.
    
                    } 
    
                    // If unable to call the DLL function, use an alternative.
    
                    if (! fRunTimeLinkSuccess) 
                    MessageBox(hwnd, "ALtenatr method", "sss", 0);            
                        fFreeResult = FreeLibrary(hinstLib);
    

    EDIT: Hier kommt noch der "header":

    typedef int (*MYPROC)(); 
                    HINSTANCE hinstLib; 
                    MYPROC ProcAdd; 
                    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
    

    greeetz
    chris90



  • Das Beispiel funktioniert mit Sicherheit für dieses Prblem.
    Allerdings möchte ich auf die Stolperfalle hinweisen. Auch hier stimmt die Definition des Funktionspointers nicht ganz. So wie ich den Code von Mr.DLL lese, hat seine CallBack den Rückkehrwert void. deshalb sollte die Definition so aussehen:

    typedef void (*MYPROC)(void);
    

    Gruß André



  • So,
    das mit der DLL funzt jetzt 🙂
    Danke nochmal

    Mr. DLL


Anmelden zum Antworten