C ++方法声明包括宏(C++ method declaration including a mac

2019-09-16 15:12发布

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

Answer 1:

这意味着类要么导出或导入,这取决于哪个模块构建。

如果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


Answer 2:

宏扩展为__declspec(dllimport)__declspec(dllexport) ,如果类从DLL导出或导入在另一侧上取决于。



文章来源: C++ method declaration including a macro