DLL schreiben unter C



  • Schau mal hier: Link



  • Ich hab mal das Beispiel Compiliert.
    Klappt aber Ich verstehs nicht ganz.Gut die DLL schafft ein eigenes Fenster worin die Nachricht ausgegeben wird.
    Nun meine Frage (oder wunsch):
    Ich habe ein Fragen Programm.Ich will das die Fragen in der DLL sind.Um nicht immer das ganze Programm zu Compilieren.Damit ich sozusagen Fragenbogen Austauschen/updaten kann.Und für andere Programme nutzen kann.
    Ist das möglich? 😕 😕
    Und denn linker ich glaub ich habs geschnallt das ist im beispieldas hier:

    DllFunction1("Hello World 1!");
    

    Oder doch das?:

    void DllFunction1(LPSTR message);
    

    Ok ich weiß es nicht.
    wäre für hilfe dankbar.
    mfg.
    Stefan.



  • der linker ist ein programm und keine zeile.



  • Ups mit danke für denn link war zu langsam.



  • achso



  • Ah jetzt hab ich was damit gemeint.Der linker ist das haupprogramm.Die DLLs die Teile die das Programm ausführen soll.Richtig?



  • Noch was bei mir ist aber gar keine DLL im verzeichniss hab ich was falsch geamcht.
    Aber es funktioniert.
    Komisch?
    Was hab ich Falsch gemacht?



  • Also..... wenn du ein Programm schreibst hast du einen Quellqode.
    Diesen Compilierst du mit einem Compiler, der dir dann den Quellcode in Assambler
    übersetzt und dir dann die Objects ausspuckt (einfach ausgedrückt).
    Dann musst du einen Linker nehmen (Programm). Dieser fügt nun die Objects
    zu einem lauffähigen Programm zusammen (.exe datei bzw. bei DLL .dll datei).

    MFG -[NULL]-



  • OK DLL kann ich jetzt erstellen.
    So jetzt meine Frage wie binde ich das in ein Programm ein.Mit Linker?Woher bekomme ich das?



  • Da du offentsichtlich keine Ahnung hast, wie Windows intern funktioniert solltest
    du es mal mit einem Einsteiger-Tutorial für Windows(-Programmierung) und/oder
    einem Buch versuchen.
    Windows-Programmierung | ISBN: 3860631888



  • Genau das ist es ich suche mal windows Tutorials.Danke.



  • - Compiler ein Programm um aus HRM (Human readable material) MRM (machine readabel material) zu machenm, d.h du überstezt dein C-programm in eine objektfile (windows *.obj, Unix *.o).
    - Linker eine Programm was mehrere obj-Files und libraries zu einem ausführbarem Programm zusammensetzt ( windows *.exe Unix keine extension vorgeschrieven dafür aber x-recht nötig).
    - library mit einem Programm zusammengeführte obj files für den einfacheren Zugriff des linkers.
    es gibt 2 Typen
    - statische libraries, die benötigten funktionen werden durch den Linker entnommen und in des ausführbare Programm eingefügt.
    - dynamische Libraries, 2 Verfahren
    -implizites laden. Beim Kompilieren ist die Inforamtion über die Library vorhanden und es werden aufrufe dafür in des Programm eingesetzt, beim Start des Programms wird die Library dazugeholt
    - explizites laden, keine Information über die dll beim linken, Das Programm öffnet nach dem start die dll selber und holt sich die pointer für die Funktionen

    IDE Programm für dummies, damit sie das alles nicht erfahren bzw den debugger nicht nutzen,
    IDE Programm für Fortgeschrittene,
    - da die meisten IDE´s einen guten Debugger mitliefern, mit denen man den Fehlern in den Programmen excellent auf die Spur kommen kann, da man die Programme quasi wie unter Basic zeile für zeile ausführt und sehen kann was in den Variablen steht und passiert.
    - Programm mit dem man das Ziel als was der code compiliert werden soll angeben kann, exe, lib, dll, Konsolprogramm Windowsprogramm.
    - Programm was einem durch die Hilfefunktion unheimlich viel über die funktionen die man nicht genau kennt erzählt.



  • @Stefan311
    Das was du tun möchtest ist tatsächlich sinnvoil in einer DLL möglich
    Lege deine daten in einem Feld in der dll an und schreibe eine Funktion die dir
    eine Zeile zurückliefert. diese Funktion rufst du dann aus deinem Programm aus auf.
    Du kannst damit unterschiedliche Fragen für unterschiedliche Leute oder untershiedliche Sprachen in jeweils einer
    dll speichern. Und nur durch das austauschen der Dlls stellt dein programm andere Fragen

    Das könnte so aussehen

    //Achtung ungetestet.
    typedef struct 
     {
        char *daten;
     } FragenSTRUCT;
    static FragenSTRUCT Fragen[]=
     {
        {"dies ist die erste Frage"},
       {"Zweite Frage"},
     };
    static anzahl=(sizeof(Fragen)/sizeof(FragenSTRUCT));
    
    int frage(int index,char *text)
    {
     int err=0;
     if (0 <= index) && (index < anzahl)
       strcpy(text,Fragen[index]);
     else
      err=1;
    return err;
    }
    


  • genau das ist es.Weil jedes mal nen neues Programm zu schreiben finde ich lästig.Hingegen nur einzelne Teile ist da schon einfacher. 🙂
    Jetzt such ich erstmal nen linker und überlege wie sowas funktioniert.(zusammenbau und Programmierung).
    Achso ich wollte es erstmal in einer Konsole machen da ich von windows nicht sehr viel weiß.(Fenster usw.)

    mfg.
    Stefan



  • Kann es sein das bei Dev++ ein linker schon eingebaut ist.



  • Ja, jede IDE hat heutzutage einen Linker 🙂

    MfG SideWinder



  • Und ich suche einen im Internet. 🙄

    Da sieht man wie wenig ahnung ich in diesem Thema habe.



  • Eine kleine Einführung in die Weiten der Programmerstellung:

    Der von dir geschriebene Quellcode wird zuerst auf syntaktische Korrektheit geprüft (meistens mit Hilfe eines Syntaxbaumes). Wenn diese passt, generiert der Compiler zu jeder Datei Code. Neuere Compiler weisen dich heutzutage auch bereits auf manche semantische Fehler hin (= statt ==, Casting-Probleme, etc.) und optimieren den erzeugten Code auf Wunsch.

    Die ganzen generierten Code-Teile müssen nun aber zu einem großen Programm zusammengefügt werden. Diese Tätigkeit übernimmt der Linker. Er bindet zusätzlich auch noch einige Standard-Libraries hinzu (damit zum Beispiel auch der Code für Standardbibliotheken wie iostream vorhanden ist).

    Du kannst auf Wunsch noch weitere statische Libraries hinzulinken. Diese hast du zB vorher bereits geschrieben. Damit sich der Compiler auskennt hast du eine .h-Datei erzeugt, den dahinterstehenden Code sieht der Compiler allerdings nicht mehr, er kommt aus der fix und fertigen statischen Library und wird vom Linker hinzugefügt.

    Dynamische Libraries sind noch eine Ebene höher. Sie werden erst zur Laufzeit geladen. Um das meiste kümmert sich das Betriebssystem - du gibst im Wesentlichen nur bekannt, dass du eine dynamische Library laden möchtest und diese oder jene Funktion darin aufrufen möchtest.

    Damit der Linker sich nicht beschwert, dass manche Funktionen noch gar nicht vorhanden sind (woher soll er auch riechen, dass die erst zur Laufzeit geholt werden) kann man statische Libraries dazuerstellen lassen (zB macht das der VC), diese tun im Prinzip nichts anderes als Code zur Verfügung zu stellen der die dynamische Version davon lädt.

    Den ganzen Lade-Code, etc. übernimmt dir also im Prinzip bereits jemand anderes. Für dich sind es im Hauptprogramm nur noch 2, 3 Aufrufe und schon greifst du auf eine DLL zu - und das nicth nur mit der Sprache die du für die Erstellung der DLL benützt hast, sondern mit jeder Sprache die DLLs unterstützt.

    Eine DLL erstellen ist dann im Wesentlichen auch sehr einfach. Du machst das Gleiche wie bei einer statischen Library. Bloß hast du eine standardmäßig festgelegte Funktion DllMain die beim Laden, Entladen, Öffnen, etc. mit unterschiedlichen Parametern aufgerufen wird (da kannst du dann zB Initialisierungen erledigen, etc.)

    Im Gegensatz zur statischen Library ist der Code jetzt aber nicht in der .exe-Datei (Dort befindet sich nur der Lade-Code für die dynamische Version) sondern in einer .dll-Datei. Diese kannst du bequem updaten, in anderen Projekten verwenden, ja sogar gleichzeitig in mehreren Programmen aufrufen.

    MfG SideWinder



  • Ich kenn mich mit abkürzungen noch nicht ganz aus was ist VC.
    Das mit denn DLL finde ich so toll weill ich mal ein simples Fragen programm hatte.
    Nun ich hatte dann aber nicht immer wieder vor alles abzuschreiben, Deshalb will ich nun mit DLLs lernen.Es wäre ein Großer vorteil für mich. 🙂

    Und noch was:Jetzt weiß ich wieso viele anwendung DLLs haben mit namen wie game,net,usw.Einfach nur zum updaten.Pracktisch. 🙂

    Danke für die vielen erklärungen.Jetzt muss ich nur noch ein bischen im netz suchen wie man sowas schreibt,befehle,usw.Ich hoffe ich ging nicht zu doll auf die nerven bei manchen.Weil ich leider noch keine ahrnung habe.Bin dabei in Windows erstmal nen Fenster hinzu kriegen.Aber Das Fragenprogramm soll in der Konsole erstmal laufen.oh ich schreib schon wieder so viel. 🙂

    danke.

    mfg.
    Stefan



  • die fragen kannst du doch in eine datei, z.B. xml datei packen??


Anmelden zum Antworten