Wozu __declspec(dllimport/export) ?



  • Hallo !

    Wie der Titel schon sagt, verstehe ich nicht ganz wozu man __declspec braucht.
    Ich weiß das es bei Funktionen die von DLL's importert/exportiert werden angegeben wird, aber es funktioniert bei mir auch genau so gut ohne (spiele gearde mit dynamischen und statischen Lib's herum).

    Kann mir jemand sagen was genau dieser modifier bewirkt ??



  • Das __declspec Schlüsselwort wird dazu verwendet, die Speicherklasse eines Identifiers festzulegen. __declspec( dllexport ) wird verwendet um - wie der Name schon sagt - aus einer DLL zu exportieren. Ohne __declspec( dllexport ) geht's auch über sog. Moduldefinitionsdateien ( *.def ).

    cheers, Swordfish



  • Bei mir gehts aber auch ohne *.Def Dateien, das man __declspec zum exportieren/importieren verwendet weiß ich, aber ich würd gern wissen was sie bewirken?! Beim statischen Libs braucht man das Schlüsselwort auch nicht.



  • Damit - oder mit Moduldefinitionsdateien - wird der Linker angewiesen, ein Symbol in die Exporttabelle der dll/exe einzutragen.

    Gast123482573 schrieb:

    Bei mir gehts aber auch ohne *.Def Dateien [...]

    Welche Toolchain denn?

    cheers, Swordfish



  • @Anfänger: ohne __declspec(dllexport) wird das Exportieren nicht funktionieren, es sei denn du machst es über das Def File oder ggf. Linker Switches.

    Ohne __declspec(dllimport) geht es sehrwohl. Der Unterschied mit und ohne dllimport ist bloss dass inline Funktionen die nicht inline Aufgerufen werden mit dllimport aus der DLL genommen werden, und ohne dllimport im Programm instanziert werden.



  • Ich verwende den gcc compiler und codeblocks IDE.

    Danke für die Erklärungen, aber eine kleine Frage ist mir noch eingefallen 😃
    DLL gibts ja nur bei Windows, also dynamische Bibl., statische Bibl. sind aber nicht Betriebssystemspezifisch oder ??

    Bei statischen Libs werden ja alle Funktionen etc. in das Programm, welches die Library gelinkt bekommt, "hineinkopiert" ist das richtig so ?

    🙂


Anmelden zum Antworten