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