DLL Tutorial fuer ANSI C



  • Hi,

    ich suche schon lange nach einem DLL Programmierungs Tutorial fuer ANSI C, wurde leider bisher nicht fündig. Kann mir jemand möglichst ein Deutsches Tutorial empfehlen? Vielen dank im Voraus 🙂



  • Das mag daran liegen, dass es sowas nicht gibt.
    DLLs sind Eigenheiten von Windows.
    Wenn du DLLs Programmieren willst, geht das nur mit der WinAPI - und das ist schon kein ANSI mehr..



  • Nur weil man eine DLL macht, heißt das ja nicht, dass der Code kein ANSI-C ist. Außerdem braucht man auch nicht unbedingt die WinAPI, um eine DLL zu programmieren.



  • zum laden der dll nützt man winapi.

    na ja, auf jeden gehört es nicht zu ansi-c, m.E., da dll betriebssystemabhängig ist. wenn einer eine dll macht, wird er windowsspezifisch arbeiten wollen.
    das interessiert ansi c nicht.

    🙂



  • das hier sieht ganz vernünftig aus
    http://www.resourcecode.de/view.php?id=776



  • elise schrieb:

    zum laden der dll nützt man winapi.

    na ja, auf jeden gehört es nicht zu ansi-c, m.E., da dll betriebssystemabhängig ist. wenn einer eine dll macht, wird er windowsspezifisch arbeiten wollen.
    das interessiert ansi c nicht.

    🙂

    Da stimm ich dir zu :). Jetzt müsste man nur noch den Compiler wissen (@mAcZ), da es ja davon auch abhängt.



  • AJ schrieb:

    Außerdem braucht man auch nicht unbedingt die WinAPI, um eine DLL zu programmieren.

    nicht?
    Na dann schieß mal los *gespannt sei*



  • Ok:

    double flaeche(double breite, double hoehe)
    {
       return(breite * hoehe);
    }
    

    Was ist jetzt daran WinAPI??

    Alles andere, um daraus eine DLL zu machen, hängt vom Compiler ab.
    Was vielleicht noch allgemein ist:

    extern "C" {
    ...
    }
    

    Aja und überleg mal wie die WinAPI benutzt wird.



  • Mooment mal.
    DLL - Dynamic Link Library Hat nichts mit einfachen Unterfunktionen zu tun.
    DLLs werden auch nicht zur Compilezeit eingebunden (wie beispielsweise deine Funktion da oben) sondern eben dynamisch beim Programmstart angebunden.

    Dass die Logik in den DLLs auch in Brainfuck geschrieben sein könnte, ist mir klar. Aaber DLLs sind einfach WinAPI.

    ANSI - C ist der C-Standard, der von jedem Compiler unterstützt werden sollte, egal auf welchem System.

    Also : Nimm dir nen Linuxrechner und compile ne DLL.. wird einfach nicht gehen.



  • Hi,

    es gibt 2 Varianten von DLLs: Die einen Lädt man während der Laufzeit mit LoadLibrary oder unter Linux mit dlopen ( da sind es die ".so" - Shared Objects)

    Und bei den anderen linkt man eine Lib die auf die DLL zugreift.

    MfG



  • jupp

    afaik sind aber beide systeme - dll und shared objects - völlig unterschiedlich. Sie sind Betriebssystemabhängig und das bedeutet (so gut wie) automatisch, dass sie kein ANSI sind...



  • DocJunioR:

    Schon. Aber bei der 2. Variante mit der Lib hat es gar keine Auswirkung auf den Code selbst. Da alles auch in einem Header stehen muss und es wird so getan als sei der Code dazu teil des Programms, was es aber net ist.

    Und daher ist es trotzdem möglich eine DLL mit ANSI-C zu verwenden.

    Die sache ist nur die das es eben vom OS abhängt ob Dynamische Bibliotheken unterstützt werden.

    MfG



  • AAARRGG!!!

    Eine DLL mit ANSI C zu verwenden ist ja auch kein Problem.. die Frage war, ob man eine DLL in ANSI C schreiben kann.. und da ist die Antwort eindeutig Nein!



  • Doch,

    es ist möglich.
    Nur dann muss das ganze nur richtig compiliert werden.
    Das heißt der Compiler / Linker muss eine DLL und eine Lib zum linken ausspucken.

    Wenn man nun diese DLL nutzen will muss man den passenden Header includieren und dem Linker die Lib übergeben.

    Und das betrifft nicht die Sprache selbst.

    MfG



  • was, wenn du den gleichen Code auf ne Linuxkiste portierst und dort compilest - ohne auch nur ein Byte zu ändern?
    Ich bin mir ziemlich sicher, dass das nicht geht.
    Mal abgesehen davon kannst du dann auch sagen, dass WinAPI ANSI C ist. Da tritt mal den Gegenbeweis an ohne dir selbst (DLL) zu widersprechen! 😉

    Naja. Ist wahrscheinlich wirklich auslegungssache..



  • DocJunioR schrieb:

    was, wenn du den gleichen Code auf ne Linuxkiste portierst und dort compilest - ohne auch nur ein Byte zu ändern?
    Ich bin mir ziemlich sicher, dass das nicht geht.
    Mal abgesehen davon kannst du dann auch sagen, dass WinAPI ANSI C ist. Da tritt mal den Gegenbeweis an ohne dir selbst (DLL) zu widersprechen! 😉

    Naja. Ist wahrscheinlich wirklich auslegungssache..

    Ähm WinAPI und ANSI-C ? Lol

    Wieso soll ich denn was beweisen was ich nie behauptet habe, geschweige denn behaupten würde?



  • *fg*
    DLLs sind Teil der WinAPI.
    Du wirst eine DLL auf nem Linux-Rechner nicht nutzen können ohne Emu oder neue Compilierung.

    Wie dem auch sei. Ich glaub, wie verwirren mit der Diskussion eher, als dass wir jemandem helfen (will sagen, sowas kann man mal bei nem Bierchen in Ruhchen besprechen 🙄



  • @DocJunioR
    Bitte informier dich mal etwas besser über WinAPI und DLLs bevor du was in den Raum stellst.

    Es ist klar, dass du eine wasweissich.dll nicht in Linux verwenden kannst. Genausogut könntest du auch versuchen eine wasweissich.exe (natürlich für Windows compiliert) in Linux auszuführen.
    Der Quellcode einer DLL kann aber sehr wohl in ANSI-C geschrieben sein. Eine DLL hat sehr viel mit (Unter-)Funktionen zu tun. Jede WinAPI-Funktion ist eine Unterfunktion einer DLL. Das hab ich schon versucht dir zu sagen, aber du willst dich ja nicht drüber informieren.

    Was du also behauptest, ist dass DLLs nur mit einem Interface (WinAPI) erzeugt werden kann, dass selbst aus DLLs besteht.

    Tatsache ist allerdings, dass es allein von der Compilierungsart abhängt. Das heißt natürlich auch, dass du eine Windows DLL in ANSI-C geschrieben auch als Shared Objects unter Linux compilieren könntest, wie auch jedes andere Programm.


Anmelden zum Antworten