一.靜态庫
用通俗的話講,靜态庫就是将代碼編譯到一個二進制檔案下(通常擴充名為.LIB).然後客戶
端調用程式,隻需要包含相關的.h檔案及LIB庫檔案一起連結到exe檔案中.可執行程式釋出後,不
再需要該.lib檔案了.
二.動态庫
最終将編譯出.lib與.dll檔案. 注意.lib檔案與上面的靜态庫雖然擴充名相同,但有本質的
差別.動态庫中的lib檔案是動态庫的引入庫. 該引入庫包含被DLL導出的函數和變量的"符号
名".而靜态庫中的.lib包含了函數和資料,動态庫的函數和資料是編譯到.dll中.動态連結庫調
用方式分為隐式調用與顯示調用(也稱靜态調用與動态調用)。
三.靜态庫的使用
1.下面來看看如何生成一個靜态庫
(1)建立靜态庫工程,建立DllStaticLib.h及建立DllStaticLib.cpp檔案
(2)DllStaticLib.h代碼如下:

#ifndef _DLL_STATIC_LIB_H__

#define _DLL_STATIC_LIB_H__

extern "C"{
int add(int x,int y);
}



#endif

(3)DllStaticLib.cpp代碼如下:

#include "DllStaticLib.h"

#include "stdafx.h"


int add(int x,int y)
{
return x+y;
}
(4)最終生成DllStaticLib.lib靜态庫檔案
2.調用靜态庫
(1)現在隻要使用DllStaticLib.lib,DllStaticLib.h檔案.
(注意讓VC能搜尋到該檔案,設定VC相關的包含目錄與庫目錄.
(2)調用代碼如下:

#include "stdafx.h"

#include <conio.h>

#include "DllStaticLib.h"//要設定VC包含目錄,以便編譯時能找到頭檔案


//要設定VC庫目錄,以便編譯連結時可以找到該DllStaticLib.lib

#pragma comment(lib,"DllStaticLib.lib")


int main(int argc, char* argv[])
{
printf("%d\n",add(3,5));
_getch();
return 0;
}
四. 動态連結庫的使用
1.生成動态連結庫
(1)建立動态連結庫工程,加入TestDll.h及TestDll.cpp檔案
(2)TestDll.h代碼如下:

#ifndef _TEST_DLL_H__

#define _TEST_DLL_H__


#ifdef TESTDLL_EXPORTS

#define TESTDLL_API __declspec(dllexport)

#else

#define TESTDLL_API __declspec(dllimport)

#endif


extern "C" TESTDLL_API int sum(int x,int y);


#endif
(3)TestDll.cpp代碼如下:

#include "TestDll.h"


int sum(int x,int y)
{
return x+y;
}
(3)注意,将工程中設定屬性定義TESTDLL_EXPORTS宏,以便确定該工程為DLL導出
(4)最終生成TestDll.lib及TestDll.dll檔案
2.隐式調用Dll庫
(1)建立win32控制台工程,加入DllClient.cpp
(2)示例代碼如下:

#include <iostream>

#include <conio.h>

#include "TestDll.h" //要設定VC包含目錄,以便編譯時能找到頭檔案

using namespace std;



//要設定VC庫目錄,以便編譯連結時可以找到該DllStaticLib.lib

#pragma comment(lib,"TestDll.lib")


int main(int argc,char *argv[])
{
printf("%d\n",sum(8,9));
_getch();
return 0;
}
(3)說明,隐式調用需要lib檔案,但是exe編譯後,就不再需要lib,隻需要dll檔案即可.
以下顯式調用不需要lib檔案,隻需要提供dll檔案.随exe運作與結束裝載或釋放dll檔案.
3.顯式調用Dll庫
(1)同上建立win32工程.加入cpp檔案,代碼如下:

#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;


typedef int FUN_SUM(int x,int y);


int main(int argc,char *argv[])
{
HINSTANCE hDll; //DLL句柄
hDll = LoadLibrary(L"TestDll.dll");
if (hDll != NULL)
{
FUN_SUM *sum = (FUN_SUM*)GetProcAddress(hDll, "sum");
if(sum)
{
cout<<(*sum)(9,10)<<endl;
}
else
{
cout<<"擷取sum函數指針失敗!"<<endl;
}
FreeLibrary(hDll);
}
else
{
cout<<"裝載TestDll.dll失敗!"<<endl;
}
_getch();
return 0;
}
建立動态連結庫項目:
1、打開Microsoft Visual Studio 2010,選擇File->New->Project。
2、在New Project中選擇Installed Templates->Visual C++->Win32。
3、選擇Win32 Console Application,設定名稱:simpledll,設定解決方案名:zdddll。
4、單擊OK,在出現的Win32 Application Wizard的Overview對話框中點選Next。
5、在Application Settings中,選擇Application type下的DLL。
6、勾選Additional options下的Empty project。
7、單擊Finish建立項目。
向動态連結庫添加類:
1、添加新類頭檔案。右鍵單擊simpledll項目,Add->New Item,選擇Header File(.h),設定名稱為simpledll,單擊Add。
2、添加新類源檔案。右鍵單擊simpledll項目,Add->New Item,選擇C++ File(.cpp),設定名稱為simpledll,單擊Add。
3、為新類添加内容。