動態鏈接庫.dll和.lib

測試環境vs2008

一、關於動態鏈接庫

1、使用動態鏈接庫時,一般都需要兩個文件:靜態庫(引入庫).lib和動態庫.dll

2、加載方式:

隱式鏈接,編譯工程時,需要先添加.lib文件。可以直接通過編譯環境添加,還可以通過代碼添加(#pragma comment  (lib,"XXX.lib"))

動態鏈接:通過下面幾個函數實現,LoadLibrary("XXX.dll"); GetProAddress(); FreeLibrary();

二、關於extern "C"、__cdecl、__stdcall(這裏是雙下劃線,雙下劃線和單下劃線是有區別的)

1、首先這三個聲明會使編譯時生成的符號庫中的名字發生變化。具體信息可以進行百度搜索這三個關鍵字。

2、我們可以創建一個Dll工程,然後分別用這三個關鍵字來聲明函數,然後用命令窗口cmd,進行dumpbin命令查看相關到處函數和變量信息,在其中就能看到鏈接的函數名變化。具體操作可以參見:http://blog.csdn.net/blpluto/article/details/5706757

3、所以爲了使dll文件在跨平臺的時候能使用原本的函數名進行調用。我們可以在dll工程下創建一個Module-Definition File(.def)文件,進行導出函數名的定義。代碼如下:

LIBRARY"Dllexercise"
EXPORTS
add

三、部分測試代碼(dll文件中只導出了一個函數add,然後在MFC下的多文檔工程中創建一個對話框進行函數調用)

  dll工程中文件:

1、Dll.h代碼

#ifdef DLL_API
#else
#define DLL_API /*extern "C" */_declspec(dllimport)
#endif
DLL_API int/* __stdcall*/ add(int a,int b);


2、Dll.cpp代碼

  #define DLL_API /*extern "C" */_declspec(dllexport)
#include "Dll1.h"

int /*__stdcall*/ add(int a, int b)
{
return a+b;
}

3、Dll1.def代碼

LIBRARY "Dllexercise"
EXPORTS
add

  DllTest工程中部分代碼:

1、在要調用add函數的文件中添加語句(記得把dll工程下的.dll文件和.lib文件複製到本工程目錄下)

#include "Dll1.h"

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

具體代碼已上傳到:http://download.csdn.net/detail/u013617648/8930511  免積分下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章