1.新建一個ActiveX Dll,工程名字為vbmytestdll,類模塊名字為mytestdll
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比石峰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式石峰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋石峰地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
2.類模塊內(nèi)容只有一個函數(shù),主要返回DLL的HELLO WORLD
Public Function dlltest1() As String
dlltest1 = "HELLO WORLD"
End Function
3.保存,生成DLL,名字為
vbmytestdll.dll
4.新建一個EXE工程,在菜單: 工程---引用---瀏覽里找到vbmytestdll.dll,把它引用進(jìn)來
5.EXE工程代碼如下:
Option Explicit
Dim testdll As mytestdll'類模塊名字
Private Sub Form_Load()
Set testdll = New mytestdll 'DLL的一個新實例
Me.Caption = testdll.dlltest1 '我的標(biāo)題=返回DLL的HELLO WORLD
End Sub
調(diào)用DLL有兩種方法:靜態(tài)調(diào)用和動態(tài)調(diào)用.
(一).靜態(tài)調(diào)用其步驟如下:
1.把你的youApp.DLL拷到你目標(biāo)工程(需調(diào)用youApp.DLL的工程)的Debug目錄下;
2.把你的youApp.lib拷到你目標(biāo)工程(需調(diào)用youApp.DLL的工程)目錄下;
3.把你的youApp.h(包含輸出函數(shù)的定義)拷到你目標(biāo)工程(需調(diào)用youApp.DLL的工程)目錄下;
4.打開你的目標(biāo)工程選中工程,選擇Visual C++的Project主菜單的Settings菜單;
5.執(zhí)行第4步后,VC將會彈出一個對話框,在對話框的多頁顯示控件中選擇Link頁。然后在Object/library modules輸入框中輸入:youApp.lib
6.選擇你的目標(biāo)工程Head Files加入:youApp.h文件;
7.最后在你目標(biāo)工程(*.cpp,需要調(diào)用DLL中的函數(shù))中包含你的:#include "youApp.h"
注:youApp是你DLL的工程名。
(二).動態(tài)調(diào)用其程序如下:
動態(tài)調(diào)用時只需做靜態(tài)調(diào)用步驟1.
01 {
02 HINSTANCE hDllInst = LoadLibrary("youApp.DLL");
03 if(hDllInst)
04 {
05 typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
06 MYFUNC youFuntionNameAlias = NULL;
07 // youFuntionNameAlias 函數(shù)別名
08 youFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,"youFuntionName");
09 // youFuntionName 在DLL中聲明的函數(shù)名
10 if(youFuntionNameAlias)
11 {
12 youFuntionNameAlias(param1,param2);
13 }
14 FreeLibrary(hDllInst);
15 }
16 }
顯式(靜態(tài))調(diào)用:
LIB + DLL + .H,注意.H中dllexport改為dllimport
隱式(動態(tài))調(diào)用:
DLL + 函數(shù)原型聲明,先LoadLibrary,再GetProcAddress(即找到DLL中函數(shù)的地址),不用后FreeLibrary
普通的c函數(shù)是在一個程序文件里的,而dll的導(dǎo)出函數(shù)是在dll文件里的 要想使用dll的函數(shù) 必須調(diào)用loadlibrary
一.動態(tài)鏈接庫(dll)結(jié)構(gòu)
——dll中定義有兩種函數(shù):導(dǎo)出函數(shù)(export
function)和內(nèi)部函數(shù)
(internal
function),導(dǎo)出函數(shù)可以被其他模塊調(diào)用,內(nèi)部函數(shù)只能在dll內(nèi)部使用。我們在用c++定制dll文件時,需要編寫的就是包含導(dǎo)出函數(shù)表的模塊定義文件(.def)和實現(xiàn)導(dǎo)出函數(shù)功能的c++文件。下面以sample.dll為例介紹def文件和實現(xiàn)文件的結(jié)構(gòu):
——1.模塊定義文件(.def)是由一個或者多個用于描述dll屬性的模塊語
句組成的文本文件,每個.def文件至少必須包含以下模塊定義語句:
第一個語句必須是library語句,指出dll的名字。
exports語句列出被導(dǎo)出函數(shù)的名字。
可以使用description語句描述dll的用途(此句可選)。
";"對一行進(jìn)行注釋(可選)
——2.實現(xiàn)文件(.cpp文件為例)
——實現(xiàn)入口表函數(shù)的.cpp文件中,包含dll入口點處理的api函數(shù)和導(dǎo)出
函數(shù)的代碼。
Dell向運行于Windows操作系統(tǒng)下的程序提供代碼、數(shù)據(jù)或函數(shù)。程序可根據(jù)DLL文件中的指令打開、啟用、查詢、禁用和關(guān)閉驅(qū)動程序。
打開一個程序的安裝目錄,在這里面可以看到一些dll的一些文件。如果在它的上面雙擊的話會在它的旁邊提示:如果是想要查看它可以下載安裝一個叫exescope的自定義應(yīng)用軟件的工具。
右邊有一個更多,點擊一下“更多”,可以看到它的默認(rèn)安裝路徑,如果不需要更改的話,它就會默認(rèn)的安裝到c盤的程序文件夾中。
點擊安裝之后,在它彈出的面板中有一個自動漢化的說明,我們點擊“已閱”。接著在它的安裝過程中會出現(xiàn)一個安裝類型,可以根據(jù)需要選擇一個安裝類型,這里就選擇它默認(rèn)的“典型安裝”,然后點擊:下一步。當(dāng)安裝到漢化的安裝目錄的時候它會提示,如果是不想把它安裝到默認(rèn)位置的話,可以在點擊瀏覽選擇一個安裝的文件位置。
主要有下面幾個步驟:
1. 創(chuàng)建新的動態(tài)鏈接庫項目,并在其中添加類的聲明和定義文件;
尤其需要注意的是在類成員函數(shù)的聲明中需要使用declspec(dllexport)修飾符,該修飾符能夠使此DLL中的方法被導(dǎo)出以供其他應(yīng)用程序使用。
2. 創(chuàng)建引用動態(tài)鏈接庫的應(yīng)用程序;
若要使用在動態(tài)鏈接庫中創(chuàng)建的成員函數(shù),則必須引用該動態(tài)鏈接庫。選中調(diào)用DLL的項目,從“項目”菜單中選擇“引用”,找到動態(tài)鏈接庫對應(yīng)的工程目錄。
若要引用動態(tài)鏈接庫的頭文件,必須修改包含目錄路徑。在“附加包含目錄中”找到DLL頭文件所在的路徑。
可執(zhí)行文件僅在運行時加載動態(tài)鏈接庫。必須告訴系統(tǒng)在哪里查找DLL,通過PATH變量指出.dll文件所在的路徑。
3. 在調(diào)用DLL的應(yīng)用程序中像使用系統(tǒng)提供的其它DLL一樣使用自定義的DLL中的成員函數(shù)就可以了。