動態庫Dll的宏定義頭文件雙向使用方法小結
這里需要提到的一點的是,在顯示調用的情況下,才需要這種頭文件,隱式調用的情況下,其實這些東西有的不必寫,請有基礎的同學自己思考.
如果想在自己的DLL文件中使用函數修改定義宏,又想同時在提供給客戶端的頭文件中讓客戶使用,有兩種方法比較方便,當然如果你直接自己
定義也未為不可,但比較費事。當然,同時你得在DEF文件中聲明導出函數,防止函數改名
第一種方法:在孫鑫老師的教程的方法:在頭文件中定義 ://定義導出宏#ifdef AUTOSCHEDULE#else#define AUTOSCHEDULE extern "C" _declspec(dllimp
然后在其的CPP文件定義:#define AUTOSCHEDULE extern "C" _declspec(dllexport)#include "XXX.h" //注意:頭文件應該在CPP的宏定義之下,否則報一個宏重定義的WARNING
因為頭文件不參與編譯,所以CPP文件單獨編譯,先定義AUTOSCHEDULE 宏,然后再展開包含的頭文件編譯,發現在宏AUTOSCHEDULE已定義,就直接編譯后面的內容。
第二種方法:熊歆斌老師的方法,估計看過他的書人并不是很多,網上沒什么人議論,但我可是看了他的書才跨過一個門檻的。非常感謝熊老師,他的書我覺得還是很中規中矩的,如果是從入門到提高,希望大家看看,不過不好說買到了,這本書比較老。
#ifdef MATH_EXPORTS #define MATH_API __declspec(dllexport) #else #define MATH_API __declspec(dllimp
不過提前要在“項目---屬性----CC++---預處理器對話框內的:預處理器定義里自己定義一個MATH_EXPORTS”這樣在DLL中就是前者宏定義,在另外人使用頭文件時是后者引進宏定義。
這個東西看似小事情,可涉及到編譯的過程,頭文件和宏的互相影響,DLL的名稱處理,說微言大義有些過,不過很重要確實是真的。
新聞熱點
疑難解答