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被展開成空串.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容