設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

1234下一頁
返回列表 發(fā)新帖
查看: 18421|回復(fù): 38
打印 上一主題 下一主題

[與其它組件] VB封裝DLL實(shí)例講解(一)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2010-11-3 18:39:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 tanhong 于 2010-11-23 14:19 編輯

一、DLL基本概念
(一)概念
DLL即動(dòng)態(tài)鏈接庫(Dynamic Link Library),是由可被其它程序調(diào)用的函數(shù)集合組成的可執(zhí)行文件模塊。DLL不是應(yīng)用程序的組成部分,而是運(yùn)行時(shí)鏈接到應(yīng)用程序中。

(二)主要優(yōu)點(diǎn):
1、多個(gè)應(yīng)用程序可以共享一個(gè)DLL,而且當(dāng)多個(gè)應(yīng)用程序調(diào)用庫的同一個(gè)函數(shù)時(shí),可執(zhí)行文件中裝入的只是該函數(shù)的內(nèi)存地址,從而節(jié)省內(nèi)存和磁盤空間;
2、使用動(dòng)態(tài)鏈接庫易于我們維護(hù)用戶程序,即使對動(dòng)態(tài)鏈接庫進(jìn)行修改也不會(huì)影響用戶程序;
3、從ACCESS角度而言,還可以更好的確保核心代碼的安全。

二、VB封裝VBA代碼,構(gòu)建自定義的DLL動(dòng)態(tài)鏈接庫
(一)ACCESS中實(shí)例代碼
下面是一個(gè)“快速獲取數(shù)字(Acc).mdb”實(shí)例(該實(shí)例在文件包中),單擊“提取結(jié)果”按鈕,將文本框中的數(shù)字在彈出消息顯示出來。
我將就這個(gè)實(shí)例演示如何將該實(shí)例VBA代碼封裝成為DLL。

? 按鈕單擊事件代碼如下:


  1. Private Sub CmdFindnumber_Click()
  2.   Dim strM   As String     '初始字符串
  3.   Dim strOut  As String     '輸出字符串變量
  4.   Dim I
  5.   
  6.   strM = Me.Text1
  7. '從第一個(gè)字符向最后一個(gè)字符循環(huán),以提取每個(gè)字符
  8.   For I = 1 To Len(strM)
  9.       '判斷是否為0到9字符,是則賦值輸出
  10.       If Mid(strM, I, 1) Like "[0-9]" Then
  11.          strOut = strOut & Mid(strM, I, 1)
  12.       End If
  13.   Next I
  14.   '用MsgBox函數(shù)進(jìn)行輸出測試
  15.   MsgBox strOut
  16. End Sub
復(fù)制代碼
   M 以上代碼還不能直接用于封裝,須將其修改成為公用函數(shù)(過程)

(二)VB封裝實(shí)例中VBA代碼
步驟一:VB編輯窗中,點(diǎn)菜單【文件】-【新建工程】,打開新建工程窗口

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊

x

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享分享 分享淘帖1 訂閱訂閱
2#
 樓主| 發(fā)表于 2010-11-3 18:44:08 | 只看該作者
本帖最后由 tanhong 于 2010-11-3 21:26 編輯

步驟二:修改工程名,這即生成的DLL庫名
1、修改工程名為:我的動(dòng)態(tài)庫
步驟三:修改類名
1改類名為:提取數(shù)字

3#
 樓主| 發(fā)表于 2010-11-3 18:45:04 | 只看該作者
本帖最后由 tanhong 于 2010-11-3 21:21 編輯

步驟四:在代碼窗口輸入如下代碼。將ACCESS中的單擊事件代碼,略做修改成為一個(gè)公用函數(shù),然后復(fù)制到VB代碼編輯窗口
?代碼如下

  1. '將這前的ACCESS代碼改成一個(gè)公用函數(shù)
  2. '輸入:strPutString 字符串變量,需分離數(shù)字的字符串
  3. '輸出: fFindNumber字符串變量,得到的數(shù)字字符
  4. Public Function fFindNumber(strPutString As String) As String
  5.    Dim strOut  As String     '輸出字符串變量
  6.    Dim I
  7.   
  8.    '從第一個(gè)字符向最后一個(gè)字符循環(huán),以提取每個(gè)字符
  9.    For I = 1 To Len(strPutString)
  10.       '判斷是否為0到9字符,是則賦值輸出
  11.        If Mid(strPutString, I, 1) Like "[0-9]" Then
  12.          strOut = strOut & Mid(strPutString, I, 1)
  13.        End If
  14.    Next I
  15.    '數(shù)字輸出
  16.    fFindNumber = strOut
  17. End Function
復(fù)制代碼


步驟五:編譯DLL,點(diǎn)菜單【文件】-【生成我的動(dòng)態(tài)庫.dll】,VBA代碼封裝DLL就完成了。

三、mdb中調(diào)用自定義DLL動(dòng)態(tài)鏈接庫
(一)新建數(shù)據(jù)庫及窗體
新建【快速提取數(shù)字(DLL)實(shí)例.mdb】數(shù)據(jù)庫,新建一個(gè)窗體【frmMain】,在窗體添文本框【text0】,按鈕【CmdFindNum】,Caption屬性:“提取數(shù)字”(見下圖)
(二)引用我的動(dòng)態(tài)庫.dll】庫
Alt+F11】打開VBE窗口,點(diǎn)菜單【工具】-【引用】,打開引用對話框,完成對我們自己編譯的DLL的引用。
(三)在CmdFindNum】按鈕單擊事件中加入如下代碼。

  1. Private Sub CmdFindNum_Click()
  2.   '申明自定義類
  3.   Dim MyFindNum As 提取數(shù)字
  4.   Dim strOut As String
  5.   
  6.   '實(shí)例化"提取數(shù)字類"對象
  7.   Set MyFindNum = New 提取數(shù)字
  8.   '將函數(shù)輸出結(jié)果賦值給自定義字符串變量
  9.   strOut = MyFindNum.fFindNumber(Text0)
  10.   
  11.   '在消息框中顯示
  12.   MsgBox "你提取的數(shù)字為:" & strOut, vbInformation, "江羽提示:"
  13. End Sub
復(fù)制代碼

點(diǎn)擊保存后,你就可以運(yùn)行一下窗體測試你的成果了
M 本文實(shí)例見實(shí)例包,下載測試如果提示錯(cuò)誤,請重新對自定義類庫進(jìn)行引用。
本文只是通過一個(gè)簡單的實(shí)例演示了,如何通過VB封裝一般的VBA中代碼,因?yàn)樵摯a中并未涉及到ACCESS應(yīng)用程序?qū)ο螅栽?/font>VB中沒有對ACCESS對象類庫進(jìn)行引用,另外實(shí)例中只是簡單演示了,如何手動(dòng)實(shí)現(xiàn)對DLL的注冊引用,在后續(xù)文章中我將就如何實(shí)現(xiàn)DLLACCESS應(yīng)用程序?qū)蛹?/font>DLL的自動(dòng)注冊及引用結(jié)合實(shí)例進(jìn)行講解。
                                                                                            
           江羽  2010-05-16   

實(shí)例及Word文稿:
游客,如果您要查看本帖隱藏內(nèi)容請回復(fù)

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊

x

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2010-11-3 20:06:17 | 只看該作者
很經(jīng)典的教程!! 值得學(xué)習(xí).
5#
發(fā)表于 2010-11-3 20:14:50 | 只看該作者
向高手致敬學(xué)習(xí)...
6#
發(fā)表于 2010-11-4 05:25:14 | 只看該作者
教程看了很清除,謝謝!
7#
發(fā)表于 2010-11-4 08:01:49 | 只看該作者
謝謝分享
學(xué)習(xí)學(xué)習(xí)
8#
發(fā)表于 2010-11-7 20:53:48 | 只看該作者
版主確實(shí)厲害
9#
發(fā)表于 2010-11-16 22:08:03 | 只看該作者
學(xué)習(xí)
10#
發(fā)表于 2010-11-17 00:02:06 | 只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 06:28 , Processed in 0.110420 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表