DLL mit DEV c++ erstellen



  • Hallo, ich bin gerade dabei eine DLL- Datei mit Dev C++ zu erstellen.

    Leider klappt das ganze nicht so. Ich bekomme zwar eine DLL-Datei hin, aber ich weiß nicht genau, wie ich sie in mein Hauptprogramm einbinden muss.

    Im Moment habe ich zwei Dateien.

    dllmain.c
    /* Replace "dll.h" with the name of your header */
    #include "dll.h"
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    DLLIMPORT void HelloWorld ()
    {
        MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
    }
    
    BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                           DWORD reason        /* Reason this function is being called. */ ,
                           LPVOID reserved     /* Not used. */ )
    {
        switch (reason)
        {
          case DLL_PROCESS_ATTACH:
            break;
    
          case DLL_PROCESS_DETACH:
            break;
    
          case DLL_THREAD_ATTACH:
            break;
    
          case DLL_THREAD_DETACH:
            break;
        }
    
        /* Returns TRUE on success, FALSE on failure */
        return TRUE;
    }
    

    und

    dll.h
    #ifndef _DLL_H_
    #define _DLL_H_
    
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
    
    DLLIMPORT void HelloWorld (void);
    
    #endif /* _DLL_H_ */
    

    Es wäre sehr nett, wenn hier kurz jemand die Vorgehensweise beschreiben würde, damit das Programm lauffähig wird.

    Danke im Vorraus

    theflasher



  • Im Grunde gibt es nur ein paar Schritte:

    Dein DLL-Projekt hast du schon erstellt.
    Dort wo

    DLLIMPORT void HelloWorld ()
    {
        MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
    }
    

    steht, schreibst du deine Funktion hin.

    In der Headerdatei steht der Prototyp der Funktion.

    Nun übersetzten => .dll, .a

    Jetzt ein neues C-Projekt anlegen, dort die dll.h inkludieren und dem Linker die .a Datei bekannt machen.

    FERTIG 🤡



  • Meine Güte, komplizierter gehts einfach nicht 😉 Aber wahrscheinlich ist es nur auf den ersten Blick kompliziert, muss einfach üben bis ich es drauf habe ^^

    Auf jeden Fall funktioniert es, vielen Dank, die Wahrscheinlichkeit sinkt, dass ich im Januar durch die Semesterprüfung fliege 😃



  • Wie hast du's gelernt?



  • Wie meinst du das? Wie ich das mit der DLL gelernt habe? Im Grunde so, wie du es jetzt erklärt hast, nur unser schönes Skript hat genau 2 Seiten Informationen zu DLL Erstellung und die zwei Seiten bestehen fast nur aus Bildern, aber keinen Erklärungen. Wir haben auch noch keine Übungen dazu gemacht, bzw ich bin jetzt eben gerade an einer dran.Muss mich halt durchbeisen.

    Deshalb bin ich recht oft im Internet am Suchen, weil sonst könnte ich es ganz vergessen^^

    Gruss theflasher



  • Nun, 2 Folien sind mehr wie die 5 Zeilen von mir 😉
    Finde ich aber cool, dass ihr DLLs benutzt, kommt gut beim Einstellungsgespräch, wenn du schon mal DLLs programmiert hast.

    Zeh Mau



  • Ja bin mal gespannt,ich studiere halt Elektrotechnik und Informationstechnik und ich schätze da kommt noch ein bisschen was dazu ^^



  • Ok, jetzt ahbe ich doch noch ein Problem. Und zwar, obwohl der Code fehlerfrei ausgeführt wird, wird einfach keine EXE Datei erzeugt.

    Ich habe die Standard -Dateien von DEv C++ nur geringfügig geändert, aber das hat scheinbar schon gereicht.

    Es sind 2 Projekte.

    Hier nochmal schnell der Code:
    Projekt 1 Speichern

    dll.h
    
    #ifndef _DLL_H_
    #define _DLL_H_
    
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL */
    # define DLLIMPORT __declspec (dllimport)
    #endif /* Not BUILDING_DLL */
    
    DLLIMPORT void ubergabe(char string[50]);
    
    #endif /* _DLL_H_ */
    
    dllmain.c
    /* Replace "dll.h" with the name of your header */
    #include "dll.h"
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    DLLIMPORT void ubergabe (char string[50])
    {
        printf("%s",string);
    }
    
    BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                           DWORD reason        /* Reason this function is being called. */ ,
                           LPVOID reserved     /* Not used. */ )
    {
        switch (reason)
        {
          case DLL_PROCESS_ATTACH:
            break;
    
          case DLL_PROCESS_DETACH:
            break;
    
          case DLL_THREAD_ATTACH:
            break;
    
          case DLL_THREAD_DETACH:
            break;
        }
    
        /* Returns TRUE on success, FALSE on failure */
        return TRUE;
    }
    

    und jetzt mein zweites Projekt
    Aufgabe8.4

    main.c
    #include <stdio.h>
    #include <stdlib.h>
    #include "dll.h"
    
    int main()
    {
    
      char string[50] = "aksdjalkdjkajsdkjakdjkal";
      ubergabe(string);
    
      system("PAUSE");	
      return 0;
    }
    

    Es wird alles fehlerfrei ausgeführt, und alle Dateien liegen in einem einzigen Ordner

    Was DevC++ macht, es erstellt eine Aufgabe8.4 " 4-Datei "
    leider lässt sich diese nicht ausführen. Das einbinden der Bibliothek habe ich auch beachtet.

    Wäre über einen kurzen Ratschlag froh

    Gruss theflasher



  • Also bei der Erstellung der DLL wird eine .dll und eine .a Datei erstellt, keine .exe.

    Beim neuen Projekt wird eine .exe erstellt. Du sagst doch selber, die Datei wird fehlerfrei ausgeführt???

    Zeh Mau



  • Also, die DLL und die Lib habe ich bereits erstellt.

    Dann habe ich ein zweites Projekt aufgemacht und und das mit der Dll verlinkt. Wenn ich jetzt kompiliere sollte doch eine EXE Datei erstellt werden oder ?
    Das zweite Projekt hat ja jetzt nichts mehr mit der DLL Erstellung zu tun.Es befindet sich nur eine Quelldatei drin und die wird mit der dll.h verlinkt.

    Aber wieso das nicht geht, keine Ahnung.Es kommt keine Exe zustande

    Gruss theflasher


Anmelden zum Antworten