DLL Tutorial fuer ANSI C



  • 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