一.靜態(tài)庫 用通俗的話講,靜態(tài)庫就是將代碼編譯到一個(gè)二進(jìn)制文件下(通常擴(kuò)展名為.LIB).然后客戶 端調(diào)用程序,只需要包含相關(guān)的.h文件及LIB庫文件一起鏈接到exe文件中.可執(zhí)行程序發(fā)布后,不 再需要該.lib文件了.
二.動(dòng)態(tài)庫 最終將編譯出.lib與.dll文件. 注意.lib文件與上面的靜態(tài)庫雖然擴(kuò)展名相同,但有本質(zhì)的 區(qū)別.動(dòng)態(tài)庫中的lib文件是動(dòng)態(tài)庫的引入庫. 該引入庫包含被DLL導(dǎo)出的函數(shù)和變量的"符號(hào) 名".而靜態(tài)庫中的.lib包含了函數(shù)和數(shù)據(jù),動(dòng)態(tài)庫的函數(shù)和數(shù)據(jù)是編譯到.dll中.動(dòng)態(tài)鏈接庫調(diào) 用方式分為隱式調(diào)用與顯示調(diào)用(也稱靜態(tài)調(diào)用與動(dòng)態(tài)調(diào)用)。
三.靜態(tài)庫的使用 1.下面來看看如何生成一個(gè)靜態(tài)庫 (1)新建靜態(tài)庫工程,新建DllStaticLib.h及新建DllStaticLib.cpp文件 (2)DllStaticLib.h代碼如下:
#ifndef _DLL_STATIC_LIB_H__
#define _DLL_STATIC_LIB_H__
![](http://image89.360doc.com/DownloadImg/2015/10/1000/60015745_1.gif)
extern "C"{
int add(int x,int y);
}
![](http://image89.360doc.com/DownloadImg/2015/10/1000/60015745_1.gif)
![](http://image89.360doc.com/DownloadImg/2015/10/1000/60015745_1.gif)
#endif/*_DLL_STATIC_LIB_H__*/
![](http://image89.360doc.com/DownloadImg/2015/10/1000/60015745_1.gif) (3)DllStaticLib.cpp代碼如下:
#include "DllStaticLib.h"
#include "stdafx.h"
![](http://pubimage.360doc.com/wz/default.gif)
int add(int x,int y)
{
return x+y;
} (4)最終生成DllStaticLib.lib靜態(tài)庫文件 2.調(diào)用靜態(tài)庫 (1)現(xiàn)在只要使用DllStaticLib.lib,DllStaticLib.h文件. (注意讓VC能搜索到該文件,設(shè)置VC相關(guān)的包含目錄與庫目錄. (2)調(diào)用代碼如下:
#include "stdafx.h"
#include <conio.h>
#include "DllStaticLib.h"//要設(shè)置VC包含目錄,以便編譯時(shí)能找到頭文件
![](http://pubimage.360doc.com/wz/default.gif)
//要設(shè)置VC庫目錄,以便編譯鏈接時(shí)可以找到該DllStaticLib.lib
#pragma comment(lib,"DllStaticLib.lib")
![](http://pubimage.360doc.com/wz/default.gif)
int main(int argc, char* argv[])
{
printf("%d\n",add(3,5));
![](http://pubimage.360doc.com/wz/default.gif)
_getch();
return 0;
} 四. 動(dòng)態(tài)鏈接庫的使用 1.生成動(dòng)態(tài)鏈接庫 (1)新建動(dòng)態(tài)鏈接庫工程,加入TestDll.h及TestDll.cpp文件 (2)TestDll.h代碼如下:
#ifndef _TEST_DLL_H__
#define _TEST_DLL_H__
![](http://pubimage.360doc.com/wz/default.gif)
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
![](http://pubimage.360doc.com/wz/default.gif)
extern "C" TESTDLL_API int sum(int x,int y);
![](http://pubimage.360doc.com/wz/default.gif)
#endif/*_TEST_DLL_H__*/ (3)TestDll.cpp代碼如下:
#include "TestDll.h"
![](http://pubimage.360doc.com/wz/default.gif)
int sum(int x,int y)
{
return x+y;
} (3)注意,將工程中設(shè)置屬性定義TESTDLL_EXPORTS宏,以便確定該工程為DLL導(dǎo)出 (4)最終生成TestDll.lib及TestDll.dll文件
2.隱式調(diào)用Dll庫 (1)新建win32控制臺(tái)工程,加入DllClient.cpp (2)示例代碼如下:
#include <iostream>
#include <conio.h>
#include "TestDll.h" //要設(shè)置VC包含目錄,以便編譯時(shí)能找到頭文件
using namespace std;
![](http://pubimage.360doc.com/wz/default.gif)
![](http://pubimage.360doc.com/wz/default.gif)
//要設(shè)置VC庫目錄,以便編譯鏈接時(shí)可以找到該DllStaticLib.lib
#pragma comment(lib,"TestDll.lib")
![](http://pubimage.360doc.com/wz/default.gif)
int main(int argc,char *argv[])
{
![](http://pubimage.360doc.com/wz/default.gif)
printf("%d\n",sum(8,9));
_getch();
return 0;
}(3)說明,隱式調(diào)用需要lib文件,但是exe編譯后,就不再需要lib,只需要dll文件即可. 以下顯式調(diào)用不需要lib文件,只需要提供dll文件.隨exe運(yùn)行與結(jié)束裝載或釋放dll文件. 3.顯式調(diào)用Dll庫 (1)同上新建win32工程.加入cpp文件,代碼如下:
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
![](http://pubimage.360doc.com/wz/default.gif)
typedef int FUN_SUM(int x,int y);
![](http://pubimage.360doc.com/wz/default.gif)
int main(int argc,char *argv[])
{
![](http://pubimage.360doc.com/wz/default.gif)
HINSTANCE hDll; //DLL句柄
![](http://pubimage.360doc.com/wz/default.gif)
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函數(shù)指針失敗!"<<endl;
}
![](http://pubimage.360doc.com/wz/default.gif)
FreeLibrary(hDll);
}
else
{
cout<<"裝載TestDll.dll失敗!"<<endl;
}
_getch();
return 0;
}
創(chuàng)建動(dòng)態(tài)鏈接庫項(xiàng)目:1、打開Microsoft Visual Studio 2010,選擇File->New->Project。 2、在New Project中選擇Installed Templates->Visual C++->Win32。 3、選擇Win32 Console Application,設(shè)置名稱:simpledll,設(shè)置解決方案名:zdddll。 4、單擊OK,在出現(xiàn)的Win32 Application Wizard的Overview對(duì)話框中點(diǎn)擊Next。 5、在Application Settings中,選擇Application type下的DLL。 6、勾選Additional options下的Empty project。 7、單擊Finish創(chuàng)建項(xiàng)目。 向動(dòng)態(tài)鏈接庫添加類:1、添加新類頭文件。右鍵單擊simpledll項(xiàng)目,Add->New Item,選擇Header File(.h),設(shè)置名稱為simpledll,單擊Add。 2、添加新類源文件。右鍵單擊simpledll項(xiàng)目,Add->New Item,選擇C++ File(.cpp),設(shè)置名稱為simpledll,單擊Add。 3、為新類添加內(nèi)容。
|