VB无所不能之五:建立“标准”DLL动态链接库文件(1)
生活随笔
收集整理的這篇文章主要介紹了
VB无所不能之五:建立“标准”DLL动态链接库文件(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VB無所不能之五:建立“標準”DLL動態鏈接庫文件(1) ——作者:鐘聲 博客地址:http://useway.blog.51cto.com 動態鏈接庫經常被認為是VC或者Dephi的專利,DLL文件可以將你編寫的函數動態的發布,并可以被其他程序很方便的調用。
??????? 有朋友會問了,在VB里面不是有一個叫做“ActiveX DLL”的項目類型嗎,生成的文件最終也是“DLL”文件啊?
??????? 沒錯,最終文件確實是DLL文件,但其實嚴格意義上VB建立的DLL并不是像VC一樣的動態鏈接庫,VB建立的是ActiveX DLL,不能像kernel32.dll”那樣通過“Declare Function .....”來調用的。
本文中將詳細講解用VB生成一個DLL動態鏈接庫文件的方法,請注意,本文將詳細講述生成一個像VC的動態鏈接庫文件,并且調用方法也是用“Declare Function .....”來調用。 好,那么我們來建立一個DLL吧。 ??????? 原理講述:
??????? VB在編譯文件的時候,采取的是兩次編譯的方法:
????????編譯第一步,首先是調用c2.exe產生OBJ文件 “c2.exe”這個文件在“C:\Program Files\Microsoft Visual Studio\VB98”目錄中,大家可以去找找看。“c2.exe”就是VB在編譯的時候調用的命令。
????????編譯第二步,調用Link.exe對OBJ文件進行鏈接 “link.exe”也在那個文件夾中,這個文件和上面的那個文件是一樣的,都是一個命令行工具。用過命令行工具的朋友肯定知道,命令行工具一般都可以制定相應參數的,對于“link.exe”也一樣,他也可以通過改變參數來調整其編譯鏈接后的結果。 那么,其參數如下:
???? usage: LINK [options] [files] [@commandfile] options: /ALIGN:#
????? /BASE:{address|@filename,key}
????? /COMMENT:comment
????? /DEBUG
????? /DEBUGTYPE:{CV|COFF}
????? /DEF:filename
????? /DEFAULTLIB:library
????? /DELAY:{NOBIND|UNLOAD}
????? /DELAYLOAD:dll
????? /DLL
????? /DRIVER[:{UPONLY|WDM}]
????? /ENTRY:symbol
????? /EXETYPE:DYNAMIC
????? /EXPORT:symbol
????? /FIXED[:NO]
????? /FORCE[:{MULTIPLE|UNRESOLVED}]
????? /GPSIZE:#
????? /HEAP:reserve[,commit]
????? /IMPLIB:filename
????? /INCLUDE:symbol
????? /INCREMENTAL:{YES|NO}
????? /LARGEADDRESSAWARE[:NO]
????? /LIBPATH:dir
????? /LINK50COMPAT
????? /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|S
????? /MAP[:filename]
????? /MAPINFO:{EXPORTS|FIXUPS|LINES}
????? /MERGE:from=to
????? /NODEFAULTLIB[:library]
????? /NOENTRY
????? /NOLOGO
????? /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
????? /ORDER:@filename
????? /OUT:filename
????? /PDB:{filename|NONE}
????? /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
????? /PROFILE
????? /RELEASE
????? /SECTION:name,[E][R][W][S][D][K][L][P][X]
????? /STACK:reserve[,commit]
????? /STUB:filename
????? /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.
????? /SWAPRUN:{CD|NET}
????? /VERBOSE[:LIB]
????? /VERSION:#[.#]
????? /VXD
????? /WARN[:warninglevel]
????? /WINDOWSCE:{CONVERT|EMULATION}
????? /WS:AGGRESSIVE 顯然有點茫然,那么多參數啊? 不用茫然,我們只要關心一個參數即可——“/EXPORT”。 加入這個參數,就是讓你生成的DLL具有輸出函數的功能的選項!! 呵呵,明白了吧?
????? VB在編譯后直接鏈接時,并沒有加入這個選項,所以,用VB提供的編譯菜單編譯時根本就不能輸出函數。 那么怎么辦??還需要問我嗎??當然是手工編譯VB工程了!! 呵呵,那就手工編譯吧!!哈哈哈,等等吧先,你看好了,每次編譯的時候我們都看不到生成的那個OBJ文件,怎么調用Link.exe進行鏈接啊??!! 是的,那么我們只有兩個選擇,要么研究一下c2.exe怎么使用,要么就在其刪除OBJ文件前將其截獲。 研究c2.exe的使用方法我覺得就省了吧,當然有興趣的朋友可以去研究,我就不想研究了,現在專攻截獲這個問題。 如何截獲,呵呵,很簡單,——把link.exe改一下名,讓系統找不到link.exe這樣就直接可以得到OBJ文件了。 好,今天先寫到這,明天再寫后半部分。 后半部分已經寫完:http://useway.blog.51cto.com/736087/295700
本文轉自 useway 51CTO博客,原文鏈接:http://blog.51cto.com/useway/295201,如需轉載請自行聯系原作者
??????? 有朋友會問了,在VB里面不是有一個叫做“ActiveX DLL”的項目類型嗎,生成的文件最終也是“DLL”文件啊?
??????? 沒錯,最終文件確實是DLL文件,但其實嚴格意義上VB建立的DLL并不是像VC一樣的動態鏈接庫,VB建立的是ActiveX DLL,不能像kernel32.dll”那樣通過“Declare Function .....”來調用的。
本文中將詳細講解用VB生成一個DLL動態鏈接庫文件的方法,請注意,本文將詳細講述生成一個像VC的動態鏈接庫文件,并且調用方法也是用“Declare Function .....”來調用。 好,那么我們來建立一個DLL吧。 ??????? 原理講述:
??????? VB在編譯文件的時候,采取的是兩次編譯的方法:
????????編譯第一步,首先是調用c2.exe產生OBJ文件 “c2.exe”這個文件在“C:\Program Files\Microsoft Visual Studio\VB98”目錄中,大家可以去找找看。“c2.exe”就是VB在編譯的時候調用的命令。
????????編譯第二步,調用Link.exe對OBJ文件進行鏈接 “link.exe”也在那個文件夾中,這個文件和上面的那個文件是一樣的,都是一個命令行工具。用過命令行工具的朋友肯定知道,命令行工具一般都可以制定相應參數的,對于“link.exe”也一樣,他也可以通過改變參數來調整其編譯鏈接后的結果。 那么,其參數如下:
???? usage: LINK [options] [files] [@commandfile] options: /ALIGN:#
????? /BASE:{address|@filename,key}
????? /COMMENT:comment
????? /DEBUG
????? /DEBUGTYPE:{CV|COFF}
????? /DEF:filename
????? /DEFAULTLIB:library
????? /DELAY:{NOBIND|UNLOAD}
????? /DELAYLOAD:dll
????? /DLL
????? /DRIVER[:{UPONLY|WDM}]
????? /ENTRY:symbol
????? /EXETYPE:DYNAMIC
????? /EXPORT:symbol
????? /FIXED[:NO]
????? /FORCE[:{MULTIPLE|UNRESOLVED}]
????? /GPSIZE:#
????? /HEAP:reserve[,commit]
????? /IMPLIB:filename
????? /INCLUDE:symbol
????? /INCREMENTAL:{YES|NO}
????? /LARGEADDRESSAWARE[:NO]
????? /LIBPATH:dir
????? /LINK50COMPAT
????? /MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|S
????? /MAP[:filename]
????? /MAPINFO:{EXPORTS|FIXUPS|LINES}
????? /MERGE:from=to
????? /NODEFAULTLIB[:library]
????? /NOENTRY
????? /NOLOGO
????? /OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
????? /ORDER:@filename
????? /OUT:filename
????? /PDB:{filename|NONE}
????? /PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
????? /PROFILE
????? /RELEASE
????? /SECTION:name,[E][R][W][S][D][K][L][P][X]
????? /STACK:reserve[,commit]
????? /STUB:filename
????? /SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.
????? /SWAPRUN:{CD|NET}
????? /VERBOSE[:LIB]
????? /VERSION:#[.#]
????? /VXD
????? /WARN[:warninglevel]
????? /WINDOWSCE:{CONVERT|EMULATION}
????? /WS:AGGRESSIVE 顯然有點茫然,那么多參數啊? 不用茫然,我們只要關心一個參數即可——“/EXPORT”。 加入這個參數,就是讓你生成的DLL具有輸出函數的功能的選項!! 呵呵,明白了吧?
????? VB在編譯后直接鏈接時,并沒有加入這個選項,所以,用VB提供的編譯菜單編譯時根本就不能輸出函數。 那么怎么辦??還需要問我嗎??當然是手工編譯VB工程了!! 呵呵,那就手工編譯吧!!哈哈哈,等等吧先,你看好了,每次編譯的時候我們都看不到生成的那個OBJ文件,怎么調用Link.exe進行鏈接啊??!! 是的,那么我們只有兩個選擇,要么研究一下c2.exe怎么使用,要么就在其刪除OBJ文件前將其截獲。 研究c2.exe的使用方法我覺得就省了吧,當然有興趣的朋友可以去研究,我就不想研究了,現在專攻截獲這個問題。 如何截獲,呵呵,很簡單,——把link.exe改一下名,讓系統找不到link.exe這樣就直接可以得到OBJ文件了。 好,今天先寫到這,明天再寫后半部分。 后半部分已經寫完:http://useway.blog.51cto.com/736087/295700
本文轉自 useway 51CTO博客,原文鏈接:http://blog.51cto.com/useway/295201,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的VB无所不能之五:建立“标准”DLL动态链接库文件(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3星|《数据思维:从数据分析到商业价值》
- 下一篇: 教学思路C#之入门五 数据类型转换