Class和类名称之间的宏定义作用

#if defined __DRAW_IMPL__

    #if (defined _AFXDLL && !defined __STAT_WITH_DLLMFC__)

         #define __DRAW_API _declspec(dllexport)

    #else

         #define __DRAW_API

    #endif // _AFXDLL

#else

     #if (defined _AFXDLL && !defined __STAT_WITH_DLLMFC__)

           #define __DRAW_API _declspec(dllimport)

     #else

           #define __DRAW_API

      #endif // _AFXDLL

  #pragma message("      (Professional User Interface Suite)")

  #pragma comment( lib, __DRAW_LIB_NAME )

#endif

一般在编写动态链接库里的类时,经常会定义象上面的宏,主要是为了使用方便,这样在编写库时,只要定义了__DRAW_IMPL__宏,所有动态库中的类都会自动导出,

例如:class __DRAW_API A{};编译时会被展开成calss _declspec(dllexport) A{};

而在用户使用时,因为没有定义__DRAW_IMPL__宏,所有的类自动加上dllimport成为导入类,成为class _declspec(import).

如果静态链接时或者直接使用时,只要定义了__STAT_WITH_DLLMFC__宏,相当于直接定义类,__DRAW_API被展开成空串.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容