2012-04-18 5 views
1

QuickFAST 라이브러리를 사용하고 있는데이 클래스 선언을 확인하면서 실제로 얻지 못하는 것 같습니다! 클래스 이름 앞에 매크로 이름이 무엇을 의미합니까? 매크로를 포함한 C++ 메서드 선언

class QuickFAST_Export Message : public FieldSet 

또한 나는이 선언

friend void QuickFAST_Export intrusive_ptr_add_ref(const Field * ptr); 

을 발견하고 다시 나는이 선언의 사용을하지 않습니다! 추가 정보를

여기 그것은 클래스가 내보내거나 모듈이 내장되어 있습니다에 따라, 가져 중 하나 있다는 것을 의미 QuickFAST_Export.hpp

#ifdef _MSC_VER 
# pragma once 
#endif 
#ifndef QUICKFAST_EXPORT_H 
#define QUICKFAST_EXPORT_H 

// Compile time controls for library generation. Define with /D or #define 
// To produce or use a static library: #define QUICKFAST_HAS_DLL=0 
// Default is to produce/use a DLL 
// While building the QUICKFAST_ library: #define QUICKFAST_BUILD_DLL 
// Default is to export symbols from a pre-built QUICKFAST DLL 
// 
// Within QUICKFAST use the QuickFAST_Export macro where a __declspec is needed. 

#if defined (_WIN32) 

# if !defined (QUICKFAST_HAS_DLL) 
# define QUICKFAST_HAS_DLL 1 
# endif /* ! QUICKFAST_HAS_DLL */ 

# if defined (QUICKFAST_HAS_DLL) && (QUICKFAST_HAS_DLL == 1) 
# if defined (QUICKFAST_BUILD_DLL) 
#  define QuickFAST_Export __declspec(dllexport) 
# else /* QUICKFAST_BUILD_DLL */ 
#  define QuickFAST_Export __declspec(dllimport) 
# endif /* QUICKFAST_BUILD_DLL */ 
# else /* QUICKFAST_HAS_DLL == 1 */ 
# define QuickFAST_Export 
# endif /* QUICKFAST_HAS_DLL == 1 */ 

# else /* !_WIN32 */ 
+0

예를 들어 다음을 검색해야합니다. '__declspec (dllexport)'또는'__declspec (dllimport)'를 사용하여 의미를 알 수 있습니다. –

답변

2

입니다.

QUICKFAST_HAS_DLL이 정의되고 1이면 모듈이 DLL로 빌드됨을 의미합니다. 외부에서 기능을 사용하려면 클래스와 메소드를 내 보내야합니다.

모듈 내부에 QUICKFAST_BUILD_DLL이 정의됩니다. 따라서 모듈을 만들 때 QuickFAST_Export__declspec(dllexport)으로 확장됩니다. 다른 모듈에서 헤더를 포함하면

class __declspec(dllexport) Message : public FieldSet 

QUICKFAST_BUILD_DLL 정의되지 않으므로 매크로는 클래스 정의에 __declspec(dllimport)로 확장하고, : 귀하의 클래스 정의가된다

class __declspec(dllimport) Message : public FieldSet 
+0

괜찮 았어. 지금은 알았어.하지만 className 앞에 __declspec (dllimport)을 두는 것은 내 수업 본문에해야 할 일이다. 나는 아직도이 선언문을 얻지 못한다는 것을 의미한다. do는 "class className : public ClassBase"이므로이 새로운 선언은 무엇입니까? – Glolita

+0

@Glolita 구문 검색을 시도해 보셨습니까? 클래스가 익스포트 될 것이라는 것을 링커에 알려줍니다. –

+0

@Glolita 전 정확히 같은 질문이 있습니다. 사람들은 내 (우리)의 질문에 만족스럽게 대답하지 않는 것 같습니다. 제 실제 질문은'__declspec (dllimport)'이 정확히 무엇인지, 그리고 C++의 법적인 구문이 클래스 선언의 중간에 놓이는 방법은 무엇입니까? 그래서 저는 LuchianGrigore의 코멘트가 전혀 도움이되지 않을까 걱정됩니다. – Ray

2

매크로가 확장 DLL에서 내보내거나 다른 쪽에서 가져온 클래스에 따라 __declspec(dllimport) 또는 __declspec(dllexport) 중 하나가됩니다.