因為覺得需要做點筆記免得每次都會忘記要重查,所以有了這篇。
這基本上是翻譯MSDN上的資料加牙齒小姐的筆記。(MSDN是好物!!)
Visual C++
Importing into an Application Using __declspec(dllimport)←這是篇名
dll是動態連結程式庫(dynamic link library),一般application要使用函式有三種辦法:
1、加入source檔(.c或.cpp檔)跟header檔(.h或.hpp檔)
好處是很簡單,要用的話只要include該.h檔就好了。(當然.c檔要加入專案內),壞處就是,沒辦法分開維護。每次有改就要全部重build,而且完全沒封裝,當然也就無從『保密』。
2、給.lib檔跟.h檔
好處是source檔不用洩露給別人,使用上也是一樣include該.h檔,再把.lib檔跟build出來的執行檔放在一起就好。不過.lib要是有改,執行檔也得重build。
3、給.dll檔、.lib檔跟.h檔
這方法的最方便的就是有改的話,給新的.dll檔就好了,不用重build。
那不過.dll怎麼匯入咧…在宣告公用符號的時候用__declspec(dllimport) 。不管是用.def檔輸出或是用__declspec(dllexport)輸出。使用的方式像這樣:
Copy Code ←這會連到原始出處,可以copy下面的程式碼(不過我試過,用firefox的話沒用,還是得用IE)
#define DllImport __declspec( dllimport )
DllImport int j;
DllImport void func();
一定要用__declspec(dllimport)來輸入和使用DLL的公用變數、函數跟物件。使用DLL的人還是需要import library來連結。
DLL檔跟使用它的應用程式可以共用同樣的.h檔。例如:
#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif
class CLASS_DECLSPEC CExampleA : public CObject
{ ... class definition ... };
那,在應用程式端的引入跟使用就像這樣:
CLASS_DECLSPEC void func1(void);
int main(void)
{
func1();
…
}
(待補完)
全站熱搜