__declspec(dllexport) oder __export?



  • sorry, wenn die frage vielleicht dumm ist, also ich hab mich heute, weil ich erstmal abstand vom map disaster gewinnen wollte,en bissl mit dlls beschäftigt, hab mich also durch die hilfe gelesen, hab im internet gesucht etc...

    aufjedenfall wurden in den source codes entweder __declspec(dllexport) oder ein define verwendet:

    #ifdef BUILD_DLL
         #define DECLSPEC __export
    #else
        #define DECLSPEC __import
    

    ich hab herausbekommen, dass es bei declspec scheinbar probleme mit dem auflösen der c++ typischen namen geben soll, _export soll diese probleme wohl nicht haben, dafür ist es aber auch nicht ganz so effektiv, wenn ich das richtig verstanden hab...ich habs doch richtig verstanden oder? 😕

    #ifdef richtig_verstanden
    Was ist denn nun besser,also was würdet ihr benutzen?
    #else
    Wie ist es denn richtig?
    #endif

    und vielleicht noch ne frage zu templates bei klassen/funktionen: die Definition in den headern brauch ich doch nur mitliefern, wenn in der exe eine von der dll nicht unterstützte instanz gefordert wird,oder?

    //edit oops sollte das nich besser nach winapi weil es windowsspezifisch ist?



  • MSDN schrieb:

    Die 32-Bit-Edition von Visual C++ verwendet __declspec(dllimport) und __declspec(dllexport), um das Schlüsselwort __export zu ersetzen, welches vorher in den 16-Bit-Versionen von Visual C++ verwendet wurde.

    Sie müssen nicht __declspec(dllimport) verwenden, damit Ihr Code korrekt kompiliert wird. Wenn Sie es aber dennoch tun, dann kann der Compiler besseren Code generieren. Dies ist deswegen möglich, weil er sicher weiß, ob in einer DLL eine Funktion existiert oder nicht, so daß dieser Code generieren kann, der eine Ebene von Zeigeroperationen überspringt, die normalerweise in einem Funktionsaufruf vorhanden wäre, der eine DLL-Grenze überschreitet. Allerdings müssen Sie __declspec(dllimport) verwenden, um die in einer DLL verwendeten Variablen zu importieren.

    Bei korrektem EXPORTS-Abschnitt in der .DEF-Datei ist __declspec(dllexport) nicht erforderlich. __declspec(dllexport) wurde hinzugefügt, um einen einfachen Weg für den Export von Funktionen aus einer .EXE oder .DLL bereitzustellen, ohne dafür eine .DEF-Datei verwenden zu müssen.

    nochmehr infos, siehe MSDN...



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC mit dem Visual C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten