Antworten:
Dies ist eine Microsoft-spezifische Erweiterung der C ++ - Sprache, mit der Sie einen Typ oder eine Funktion mit Speicherklasseninformationen zuordnen können.
Dokumentation
Die kanonischen Beispiele sind __declspec(dllimport)
und __declspec(dllexport)
, die den Linker anweisen, ein Symbol von oder in eine DLL zu importieren bzw. zu exportieren.
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
( __declspec(..)
Fasst nur die spezifischen Inhalte von Microsoft zusammen. Um Kompatibilität zu erreichen, werden normalerweise Makros verwendet.)
.lib
ein passendes exportiertes Symbol enthält.
Es wird hauptsächlich zum Importieren von Symbolen aus / Exportieren von Symbolen in eine gemeinsam genutzte Bibliothek (DLL) verwendet. Sowohl Visual C ++ - als auch GCC-Compiler unterstützen __declspec(dllimport)
und __declspec(dllexport)
. Andere Verwendungen (einige nur von Microsoft) sind im MSDN dokumentiert .
Ein weiteres Beispiel zur Veranschaulichung der __declspec Schlüsselworts :
Wenn Sie einen Windows-Kerneltreiber schreiben, möchten Sie manchmal Ihre eigenen Prolog- / Epilog-Codesequenzen mit Inline-Assembler-Code schreiben , damit Sie Ihre Funktion mit dem nackten Attribut deklarieren können .
__declspec( naked ) int func( formal_parameters ) {}
Oder
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Bitte beziehen Sie sich auf nackt (C ++)
Im Wesentlichen führt Microsoft seine C ++ - Erweiterungen so ein, dass sie nicht mit zukünftigen Erweiterungen von Standard-C ++ in Konflikt stehen. Mit __declspec können Sie eine Funktion oder Klasse zuordnen. Die genaue Bedeutung hängt von der Art der __declspec ab. __declspec (nackt) unterdrückt beispielsweise die Prolog- / Epilog-Generierung (für Interrupt-Handler, einbettbaren Code usw.), __declspec (Thread) erstellt eine Variable threadlokal und so weiter.
Die vollständige Liste der __declspec-Attribute ist auf MSDN verfügbar und variiert je nach Compilerversion und Plattform.
GCC 4.2
, dieses Angebot Alternative neben ihre __attribute__ ((dllexport))
zu __declspec(dllexport)
, ist es fair zu Anruf __declspec
, eine Microsoft-only - Erweiterung?
Ich weiß, dass es acht Jahre her sind, aber ich wollte diesen in MRuby gefundenen Code teilen, der zeigt, wie __declspec()
man auf der gleichen Ebene wie der verwendet werden kann export keyword
.
/** Declare a public MRuby API function. */
#if defined(MRB_BUILD_AS_DLL)
#if defined(MRB_CORE) || defined(MRB_LIB)
# define MRB_API __declspec(dllexport)
#else
# define MRB_API __declspec(dllimport)
#endif
#else
# define MRB_API extern
#endif
__declspec(dllexport)
vor jeder Funktion in Ihrer Bibliothek