Yanıtlar:
Bu, bir tür veya işlevi depolama sınıfı bilgileriyle ilişkilendirmenize olanak tanıyan C ++ dilinin Microsoft'a özgü bir uzantısıdır.
belgeleme
Kanonik örnekleridir __declspec(dllimport)
ve __declspec(dllexport)
veya bir DLL ihracat ve ithalat (sırasıyla), bir sembol için bağlayıcı talimat olan.
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
( __declspec(..)
Microsoft'un belirli öğelerini tamamlar - uyumluluk elde etmek için genellikle makrolarla tamamlanır)
.lib
eşleşen bir dışa aktarma sembolü bulunan ilk bulduğu bağlayıcı tarafından verilir .
__Declspec anahtar kelimesini gösteren başka bir örnek :
Bir Windows Çekirdek Sürücüsü yazarken, bazen satır içi montajcı kodunu kullanarak kendi prolog / epilog kod dizilerini yazmak istersiniz , böylece işlevinizi çıplak öznitelik ile bildirebilirsiniz .
__declspec( naked ) int func( formal_parameters ) {}
Veya
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
Lütfen çıplak (C ++) 'a bakın
Temel olarak, Microsoft'un C ++ uzantılarını, bu şekilde gelecekteki standart C ++ uzantılarıyla çakışmayacak şekilde tanıtmasıdır. __Declspec ile bir işlev veya sınıf ilişkilendirebilirsiniz; kesin anlam __declspec'in doğasına bağlı olarak değişir. __declspec (çıplak), örneğin, prolog / epilog üretimini bastırır (kesme işleyicileri, katıştırılabilir kod, vb. için), __declspec (thread) değişken bir iş parçacığı yerelini vb. yapar.
__Declspec özniteliklerinin tam listesi MSDN'de bulunur ve derleyici sürümüne ve platforma göre değişir.
GCC 4.2
onların için, ek olarak bu teklif alternatifi __attribute__ ((dllexport))
için __declspec(dllexport)
, bu çağrıya adil __declspec
bir Microsoft sadece uzatma?
Sekiz yıl geçtiğini biliyorum ama MRuby'de bulunan ve __declspec()
arının aynı seviyede nasıl kullanılabileceğini gösteren bu kod parçasını paylaşmak istedim 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)
kitaplığınızdaki her işlevden önce eklemeniz gerektiğini bulana kadar DLL'lerinizin neden işe yaramayacağını anlamaya çalışırken zaman kaybedebilirsiniz