因為覺得需要做點筆記免得每次都會忘記要重查,所以有了這篇。
    這基本上是翻譯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檔。例如:


Copy Code

#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();

}

(待補完)
arrow
arrow
    全站熱搜

    ypyp 發表在 痞客邦 留言(1) 人氣()