不知道現(xiàn)在還有沒有人在開發(fā)DLL,其實VS下面開發(fā)C++的DLL還是很方便的,而且Release的時候也很方便,只要把模塊的只能劃分清楚,封裝好不同的DLL工程,在一個主工程里面引用這些不同的DLL工程還是很不錯的,這樣發(fā)布的時候有一個主工程的EXE 和不同的DLL就可以了,不論是調試還是Release都比較簡單,下面就簡單說說開發(fā)的過程。
首先要有一個解決方案,我想這個怎么搞就不用我在這里廢話了哦,生成一個項目作為界面,同時這個項目也是主項目。在該解決方案下面添加實現(xiàn)不同功能的各種項目,這些項目在向導中選擇的時候選擇為win32 項目,在為win32項目的應用程序設置中選擇DLL就可以建立一個DLL工程了,在DLL工程中添加自己寫的頭文件和CPP文件,這樣就建立了一個DLL不過現(xiàn)在還沒有導出DLL。
要生成一個DLL還必須添加導出函數的宏, __declspec(dllexport)和__declspec(dllimport) 這里有一個小的技巧,就是利用工程的預編譯宏來設置如果有一個工程名為Test,在要導出的類前面加上如下的代碼
1
#ifdef TEST_EXPORTS
2
#define TEST_API __declspec(dllexport)
3
#else
4
#define TEST_API __declspec(dllimport)
5
#endif
如果要導出的類名為class exportA;則可以在頭文件中類的聲明可以這樣寫class TEST_API exportA結可以把整個類導出了,在主工程中引用導出類exportA 只要包含該頭文件就可以了,為什么會這樣這是因為使用了上面的預編譯頭的緣故哦,在DLL工程中存在TEST_EXPORTS宏,所以在DLL工程中是類導出,在其他引用該工程的工程中包含搞頭文件因為不存在TEST_EXPORTS宏,所以是類導入,呵呵 比較巧妙吧,其實看看網上的很多開源的庫生成DLL的好像很多也使用了該方法,不過可能可能開源庫很少是用VS開發(fā)的,所以不知道他們具體是怎么搞的。但是確實看到很多的開源庫的配置文件性質的投文件中使用了這個技巧的。
上面說的還有一個問題就是在其他工程中包含DLL工程還存在問題,無法引用導出的類,應該還有一個工作要做那就是應該包含DLL工程生成的lib 和dll文件加上導出類的頭文件就可以直接使用DLL工程中的類了哦,不過如果是自己開發(fā)還是最好把DLL工程和要引用DLL的工程作為一個解決方案的啦,這樣方便調試的,這里有幾個問題要注意:
1 項目依賴一定要設置好,至于怎么設置 那我就不說了哦,呵呵 在項目右鍵總是會的哦
2 項目引用要設置哦,比如說工程A使用了exportA類,那就一定要設置引用,引用工程Test,怎么設置,在A的通用屬性中的引用中設置啦。
ok這樣就可以開發(fā)出使用DLL的工程了哦,Release的時候含有一大堆的DLL給用戶搞得很專業(yè)的樣子哦,呵呵!PS:可能有人說導出類會暴露很多細節(jié)給用戶啦,呵呵這個其實也好解決的哦,看看OCI的封裝就會知道哦,使用私有類就可以隱藏所有的私有方法和屬性的哦,具體怎么搞?呵呵去看看exception C++上關于IMPL的啦 上面有很好的說明撒。