首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含宏的C++方法声明

包含宏的C++方法声明
EN

Stack Overflow用户
提问于 2012-04-18 21:30:35
回答 2查看 1.3K关注 0票数 1

我正在使用QuickFAST库,当我检查它的时候,我发现了这个类声明,而我似乎并没有真正得到它!我的意思是宏名在类名之前有什么作用!

代码语言:javascript
复制
class QuickFAST_Export Message : public FieldSet

我还发现了这份声明

代码语言:javascript
复制
friend void QuickFAST_Export intrusive_ptr_add_ref(const Field * ptr);

再说一次,我没有得到这个声明的用法!

有关更多信息,请访问QuickFAST_Export.hpp

代码语言:javascript
复制
#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 */
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-18 21:31:37

这意味着根据构建的模块,类可以被导出,也可以被导入。

如果定义了QUICKFAST_HAS_DLL并且等于1,则意味着该模块是作为DLL构建的。要从外部使用功能,必须导出类和方法。

在模块内部,定义了QUICKFAST_BUILD_DLL。因此,在构建模块时,QuickFAST_Export将扩展为__declspec(dllexport)。您的类定义将变为:

代码语言:javascript
复制
class __declspec(dllexport) Message : public FieldSet

如果包含来自不同模块的头文件,则未定义QUICKFAST_BUILD_DLL,因此宏将扩展为__declspec(dllimport),而您的类定义将扩展为:

代码语言:javascript
复制
class __declspec(dllimport) Message : public FieldSet
票数 2
EN

Stack Overflow用户

发布于 2012-04-18 21:34:11

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10210449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档