




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、轉(zhuǎn)帖VB創(chuàng)建能作為輸出函數(shù)的DLLDLL函數(shù),輸出QQ:8DLL文件(即Dynamic Link Library動(dòng)態(tài)鏈接庫(kù))作為系統(tǒng)的一個(gè)重要的組 成部分,除了一些小程序外,我們幾乎能在所有軟件中看到DLL文件,而且如果使用VB寫的一些收費(fèi)軟件有一個(gè) DLL代替關(guān)鍵函數(shù),想破解都難了。因此, 我們就有必要來(lái)學(xué)習(xí)如何編寫 DLL。對(duì)于很多初學(xué)VB的網(wǎng)友來(lái)說(shuō),VB是一門比較簡(jiǎn)單的語(yǔ)言,而 Microsoft公 司在開(kāi)發(fā)VB時(shí),也增添了很多功能。所以,我個(gè)人覺(jué)得VB除了部分不足之外還是挺不錯(cuò)的,當(dāng)然我指的不足是主要是 VB運(yùn)行庫(kù)方面的問(wèn)題。對(duì)于很多VB初學(xué)者來(lái)說(shuō),都會(huì)有這么一個(gè)錯(cuò)誤的認(rèn)識(shí) 一一VB中
2、創(chuàng)建的DLL 只是COM組件,無(wú)法作為輸出函數(shù)的 DLL(即VB寫的DLL是不完整的DLL。 然而,對(duì)于一些VB的高手來(lái)說(shuō),他們就知道應(yīng)該如何寫具有返回值的 DLLo其 實(shí),國(guó)外早已經(jīng)有人做出了在 VB中制作標(biāo)準(zhǔn)DLL的Add-Ins了,而且在網(wǎng)上也 有對(duì)于寫VB創(chuàng)建能作為輸出函數(shù)的DLL的相關(guān)文章。今天,我再來(lái)講講這個(gè)話 題一一VB創(chuàng)建能作為輸出函數(shù)的DLL對(duì)于VB編寫DLL,按照我的經(jīng)驗(yàn),主要分為兩步:一、 “安內(nèi)”,二、 “攘外”首先, “攘外必先安內(nèi) ”我們要知道如何使DLL擁有一個(gè)能被調(diào)用的API函數(shù)。很簡(jiǎn)單,我不想多 說(shuō),就是在 Module里面寫一個(gè) Public的Functio
3、n接下來(lái),我們就可以 “攘外”了那么,先來(lái)介紹一下編譯技術(shù)編譯器的編譯技術(shù)可以分為 Native Compile (自然編譯)與P-Code Compile (偽編譯)兩種。自然編譯是編譯器將高級(jí)語(yǔ)言轉(zhuǎn)換為匯編代碼,并經(jīng)鏈接生成EXE程序的過(guò)程。偽編譯是編譯器將高級(jí)語(yǔ)言轉(zhuǎn)換為某種編碼后,將能解釋、執(zhí)行此編碼的 一段程序一同鏈接,生成 EXE程序。偽代碼P-Code,最早應(yīng)該叫做Pascal-Code其名稱起源于一個(gè) Pasca編譯 器使用的 中間代碼”編譯技術(shù)?,F(xiàn)在一般作為 Pseudo-code (偽代碼)或Packed- code (壓縮代碼)簡(jiǎn)稱。采用偽代碼編譯時(shí),每個(gè) VB源文件(包括
4、.frm (窗體)、.bas (標(biāo)準(zhǔn)模 塊)、.cis (類模塊)經(jīng)VB IDE編譯后各自生成相應(yīng)的.obj文件,交鏈接程序 Lin k.exe生成偽編譯的可執(zhí)行文件(EXE、DLL OCX等)。而用自然編譯時(shí),每個(gè) VB源文件由C2.exe編譯生成匯編代碼,生成相應(yīng)的 obj文件,再由Link.exe鏈接成為完 整的可執(zhí)行文件。別看編譯只有兩步,其實(shí),有大玄奧在里頭。Microsoft公司,可以說(shuō)是十分的狡猾,因?yàn)樵谀J(rèn)的方式下,VB編譯的兩步使用到的命令行都是他們?cè)O(shè)定好的,所以,跳過(guò)了很多有用的部分,包括我 們今天講的輸出函數(shù)部分。如果在 LINK的時(shí)候添加EXPORT選項(xiàng),實(shí)際上是可 以
5、輸出函數(shù)的。但是,在 VBLi nkd的命令行中將這個(gè)選項(xiàng)部分跳過(guò)了。而且過(guò)分 的是:VB在構(gòu)造EXE后會(huì)將編譯出來(lái)的OBJ文件刪除,這樣就無(wú)法手動(dòng)通過(guò) Link 來(lái)創(chuàng)建我們需要的DLL 了。根據(jù)前人的方法,加上自己修改,用一個(gè)比較齷齪 的方法來(lái)變通打開(kāi) “VB6.0 ”新建一個(gè) 標(biāo)準(zhǔn)EXE工程”,把Form移除,添加一個(gè)Module在模塊 里輸入一下代碼:Sub Main()If Comma nd = Then Exit Sub 命令行不為空Dim intCMD As IntegerClipboard.Clear 清空剪貼板Clipboard.SetText Command 將 命令行復(fù)制到
6、剪貼板去掉復(fù)制到剪貼板LINK速度會(huì)快些intCMD二MsgBoxC編譯命令行如下:&vbCrLf&Command&vbCrLf&點(diǎn)擊 是”繼續(xù)編譯,點(diǎn)擊 否”編譯DLL點(diǎn)擊 取消”中斷編譯,vbYesNoCancel + vbInformation,編譯”)Select Case intCMDCase vbYes選擇是”繼續(xù)編譯Shell VBLINK & Command, vbHideCase vbNo 選 擇“否”Dim FuncName As String, cmd As String, l As IntegerFuncName=InputBoxC請(qǐng)輸入輸出的函數(shù)名稱(對(duì)個(gè)函數(shù)請(qǐng)用英文
7、半角分號(hào) 分開(kāi) ), _非法操作出錯(cuò)我不管 ) 模塊內(nèi)能編譯出來(lái)的輸出函數(shù)名修改命令行If FuncName = Then Exit SubDoFuncName = Replace(FuncName, ;, /EXPORT:)Loop Until 0 = InStr(FuncName, ;)l = InStr(Command, vbaS)cmd=Left(Command,l+4)&/EXPORT:&FuncName&Right(Command, Len(Command) - l - 3)Shell VBLINK & cmd, vbHideCase vbCa ncel xX編譯Exit SubE
8、nd SelectEnd Sub大家可能看出來(lái)了 ,沒(méi)錯(cuò)就是在每個(gè)輸出函數(shù)前加 /EXPORT:生成MyLink.exe,復(fù)制到VB的安裝文件夾里,把安裝文件夾的LINK.EX敢成 VBLink.exe 把我們寫的 MyLink.exe 改成 Link.exe到這一步,你應(yīng)該懂了吧。來(lái)做個(gè)示例我新建了一個(gè) ActiveXDLL的工程,添加了一個(gè) Module,寫了一個(gè)Public的 Fun cti on,如下Public Function Add(ByVal A As Long) As LongAdd = A + AEnd Function生成 “E:Math.dll ”被截獲的命令行(VB默
9、認(rèn)命令行)如下:E:Class1.OBJE:Module1.OBJE:Math.OBJC:ProgramFilesMicrosoftVisualStudioVB98VBAEXE6.LIB/ENTRY:_vbaS/OUT:E:Math.dll/BASE:0x11000/SUBSYSTEM:WINDOWS,4.0/VERSION:1.0/DLL/INCREMENTAL:NO/OPT:REF/MERGE:.rdata=.text /IGNORE:4078修改后命令行(修改后的命令行)如下:E:Class1.OBJE:Module1.OBJE:Math.OBJC:ProgramFilesMicroso
10、ftVisualStudioVB98VBAEXE6.LIB/ENTRY:_vbaS/EXPORT:Add/OUT:E:Math.dll/BASE:0x11000 /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0 /DLL /INCREMENTAL:NO/OPT:REF /MERGE:.rdata=.text /IGNORE:4078大家對(duì)比兩行命令可以發(fā)現(xiàn)在 /ENTRY:_vbaS后面,我增加了 /EXPORT:Add,這就是關(guān)鍵所在現(xiàn)在,我又新建了一個(gè) EXE工程,加一個(gè)VB API聲明,代碼部分:Private Declare Function Add Lib E:Math.dll (ByVai A As Long) As Long AP聲明 Private Sub Form_Load()MsgBox Add(2)End Sub看到效果沒(méi),成功了吧至于 String型么,投遞時(shí) StrConv(String,vbUnicode 返回時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份制企業(yè)合同審查文書規(guī)范指南
- 小工程施工安全合同協(xié)議書
- 《加法結(jié)合律 》(教學(xué)設(shè)計(jì)) -2024-2025學(xué)年 北師大版四年級(jí)數(shù)學(xué)上冊(cè)
- 咸寧職業(yè)技術(shù)學(xué)院《電子測(cè)試技術(shù)(下)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西藍(lán)天航空職業(yè)學(xué)院《地學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 汕頭職業(yè)技術(shù)學(xué)院《環(huán)境前沿與熱點(diǎn)講座》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶科技學(xué)院《室內(nèi)軟裝飾設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州護(hù)理職業(yè)技術(shù)學(xué)院《軟件體系結(jié)構(gòu)與設(shè)計(jì)模式》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北美術(shù)學(xué)院《牙體牙髓病學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆輕工職業(yè)技術(shù)學(xué)院《管理文秘》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年度安徽合肥市建投集團(tuán)社會(huì)招聘54人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2016屆高三備考建議
- 北師大版六年級(jí)下冊(cè)數(shù)學(xué)全冊(cè)表格式教案
- 2021年阿里巴巴全球數(shù)學(xué)競(jìng)賽預(yù)選賽試題及參考答案
- 龐中華硬筆字帖-2500常用字-硬筆書法-描紅-全集-打印版
- 上海市崇明區(qū)2025屆高三上學(xué)期一模 英語(yǔ)試卷(含答案)
- 突發(fā)事件應(yīng)急預(yù)案管理辦法培訓(xùn)課件
- 國(guó)家電投《新能源電站單位千瓦造價(jià)標(biāo)準(zhǔn)值(2024)》
- 原發(fā)性肺癌臨床路徑
- 學(xué)校科技節(jié)活動(dòng)方案
- 校園食品安全和膳食經(jīng)費(fèi)管理方案3篇
評(píng)論
0/150
提交評(píng)論