답변:
이것은 C ++ 언어에 대한 Microsoft 고유의 확장으로, 스토리지 클래스 정보를 사용하여 유형 또는 함수의 속성을 지정할 수 있습니다.
선적 서류 비치
표준 예제는 __declspec(dllimport)및로 __declspec(dllexport), 링커에서 DLL로 (또는 각각) 심볼을 가져오고 내보내도록 지시합니다.
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
( __declspec(..)마이크로 소프트의 특정 내용을 마무리합니다. 호환성을 달성하기 위해 보통 매크로로 마무리합니다.)
.lib내립니다. 링커 는 일치하는 내 보낸 심볼이있는 첫 번째 를 찾습니다.
__declspec 키워드 를 설명하는 또 다른 예 :
Windows 커널 드라이버를 작성할 때 인라인 어셈블러 코드를 사용하여 고유 한 프롤로그 / 에필로그 코드 시퀀스를 작성하려고 하므로 벌거 벗은 속성으로 함수를 선언 할 수 있습니다 .
__declspec( naked ) int func( formal_parameters ) {}
또는
#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}
알몸 (C ++)을 참조하십시오
기본적으로 Microsoft가 C ++ 확장을 도입하여 향후 표준 C ++ 확장과 충돌하지 않도록합니다. __declspec을 사용하면 함수 또는 클래스를 특성화 할 수 있습니다. 정확한 의미는 __declspec의 특성에 따라 다릅니다. 예를 들어 __declspec (naked)은 프롤로그 / 에필로그 생성 (인터럽트 처리기, 포함 가능한 코드 등)을 억제하고 __declspec (thread)는 변수를 스레드 로컬로 만듭니다.
__declspec 특성의 전체 목록은 MSDN에서 사용할 수 있으며 컴파일러 버전 및 플랫폼에 따라 다릅니다.
GCC 4.2자신에게뿐만 아니라 그 제공의 대안 __attribute__ ((dllexport))에 __declspec(dllexport), 그것은 전화에 공정한 __declspec마이크로 소프트 전용 확장?
8 년이 지났다는 것을 알고 있지만 MRuby에서 발견 된이 코드를 공유하여 __declspec()꿀벌과 같은 수준에서 꿀벌을 어떻게 사용할 수 있는지 보여줍니다 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)라이브러리의 각 기능 앞에 추가 해야 할 때까지 DLL이 작동하지 않는 이유를 알아내는 데 시간이 낭비 될 수 있습니다.