用VC 定製和呼叫動態鏈結庫

2021-08-25 07:25:25 字數 2353 閱讀 9778

用vc++定製和呼叫動態鏈結庫

通常我們在呼叫dll時所需的dll檔案必須位於以下三個目錄之一:

(1)windows的系統目錄:/windows/system;

(2)dos中path所指出的任何目錄;

(3)程式所在的目錄。

一、動態鏈結庫的結構

動態鏈結庫中定義有兩種函式:匯出函式(export function)和內部函式(internal function),

匯出函式可以被其它模組呼叫,內部函式只能在庫內部使用。我們在用c++定製動態庫檔案時,

需要編寫的就是包含匯出函式表的模組定義檔案(.def)和實現匯出函式功能的c++檔案。下面以

sample.dll為例介紹def檔案和實現檔案的結構。

1.模組定義檔案(.def)是乙個或多個用於描述dll屬性的模組語句組成的文字檔案,每個def文

件至少必須包含以下模組定義語句:

·第乙個語句必須是library語句,指出dll的名字;

·exports語句列出被匯出函式的名字;

·可以使用description語句描述dll的用途(此句可選);

·";"對一行進行注釋(可選)。

2.實現檔案

實現入口表函式的cpp檔案中,包含dll入口點處理的api函式和匯出函式的**。

二、建立sample.dll

1.首先建立sample.dll的工程,啟動vc++5.0按以下步驟生成dll工程:

·在選單中選擇file/new/project;

·在工程列表中選擇win32 dynamic-link library;

·在project name中輸入工程名:sample;

·單擊location右邊按鈕,選擇c:/sample目錄;

·單擊ok完成,至此已建立了sample.dll的工程檔案。

2.建立sample.def檔案:

·在選單中選擇file/new/text file;

·輸入以下**後儲存檔名"sample.def":

;sample.def

;指出dll的名字sample,鏈結器將這個名字放到dll導入庫中

library sample

;定義匯出函式showme()為例

exports

showme

;def檔案結束

3.建立sample.cpp

.在選單中選擇file/new/c++source file項

.輸入以下**後儲存檔名"sample.cpp"

#include 〈windows.h〉

int showme(void);

//dllentrypoint為dll入口點函式,負責初試化並終止dll

bool winapi dllentrypoint(hinstance hdll,dword dwreason,lpvoid reserved)

case dll-process-detach:

} return true; }

int showme(void)

4.編譯dll檔案

從build選單中選擇build sample.dll,產生sample.dll檔案,以後就可以隨時呼叫了。

三、在應用程式中呼叫dll檔案

在應用程式中要首先裝入dll後才能呼叫匯出表中的函式,例如用mfc建立基於對話方塊的工

程test,並在對話方塊上放置"load"按鈕,你就必須新增裝載**。

1.首先在testdlg.cpp的首部新增變數設定**:

//設定全域性變數glibsample用於儲存dll控制代碼

hinstance glibsample=null;

//第二個變數showme是指向dll庫中showme()函式的指標

typedef int(showme)(void);

showme showme;

2.利用classwizard為"load"按鈕新增裝載dll的**:

void ctestdlg::onloadbutton()

//裝載sample.dll,未加路徑,將在三個預設路徑中尋找

glibsample=loadlibrary("sample.dll");

//返回dll中showme()函式的位址

showme=(showme)getprocaddress(glibsample,"showme"); }

3.只要dll裝載成功,在應用程式中就可以直接呼叫showme()函式(本程式在windows 95,vc++5.0中執行通過)。

用VC 定製和呼叫動態鏈結庫

用vc 定製和呼叫動態鏈結庫 通常我們在呼叫dll時所需的dll檔案必須位於以下三個目錄之一 1 windows的系統目錄 windows system 2 dos中path所指出的任何目錄 3 程式所在的目錄。一 動態鏈結庫的結構 動態鏈結庫中定義有兩種函式 匯出函式 export functio...

呼叫靜態鏈結庫和動態鏈結庫

呼叫靜態鏈結庫 靜態鏈結庫由.h和.lib檔案組成,h檔案在工程中用來宣告,而.lib檔案包含供外界呼叫的函式的原型。vc 6.0中呼叫靜態鏈結庫.lib共3種方法 1.首先使用語句 include lib.h 並將lib.h拷貝到當前工程目錄下 接著對staticlib smp.lib使用語句 p...

用python ctypes呼叫動態鏈結庫

ctypes is very cool great piece of work.just van rossum ctypes使得python能夠直接呼叫c語言開發的動態鏈結庫,非常強大。為了使用ctypes,你必須依次完成以下步驟 編寫動態連線庫程式 載入動態連線庫 將python的物件轉換為cty...