1

我正在使用 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 */
4

2 回答 2

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
于 2012-04-18T13:31:36.580 回答
2

宏扩展为__declspec(dllimport)__declspec(dllexport),具体取决于类是从 DLL 导出还是从另一侧导入。

于 2012-04-18T13:34:11.327 回答