VB無所不能之五:建立“標準”DLL動態連結程式庫檔案(1)

來源:互聯網
上載者:User
VB無所不能之五:建立“標準”DLL動態連結程式庫檔案(1) 作者:鐘聲 部落格地址:http://blog.csdn.net/useway         動態連結程式庫經常被認為是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://blog.csdn.net/useway/archive/2010/04/15/5489951.aspx。。。《Java程式員,上班那點事兒》:
前言目錄
卓越網銷售連結 
China-pub銷售連結
噹噹網銷售連結《Java程式員,上班那點事》紀念帖

關於下載《Java程式員,上班那點事而》的電子版

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.