用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...