我正在使用QuickFAST库,在检查时我发现了这个类声明,我似乎并没有真正得到它!我的意思是类名之前的宏名称是什么!
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 :(得分: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
答案 1 :(得分:2)
宏扩展为__declspec(dllimport)
或__declspec(dllexport)
,具体取决于该类是从DLL导出还是导入到另一端。