當前位置:編程學習大全網 - 編程語言 - 請問哪裏有用VB或者VB.net寫動態鏈接庫的資料?

請問哪裏有用VB或者VB.net寫動態鏈接庫的資料?

VB壹般可以生成兩個特殊的DLL,壹個是ActiveX DLL,壹個是ActiveX Control(*。ocx)。這兩種dll都是VB支持的標準類型,在VB自己的例子裏都有。可以參考他們。更詳細的介紹請參考我的書《Visual Basic編程推廣:ActiveX控件(/articles/vbactivex/)中的“第十六章其他ActiveX組件”。

NewViewStudio的觀點:

VB中創建的DLL只是壹個COM組件,不能作為輸出函數的DLL。其實這只是壹個錯誤的說法。事實上,MS非常狡猾。如果妳是壹個VB狂熱者,妳應該嘗試過這個方法來創建壹個輸出函數的DLL。

其實VB編譯文件是兩次的。首先,C2.exe被調用生成*。然後Link.EXE連接被調用。如果在鏈接時添加導出選項,實際上可以輸出函數。不過這些在VB的工程選項裏都被屏蔽了。更何況VB在構建完成後會刪除OBJ文件,這樣我們就無法通過Link手動創建我們需要的DLL了。但是我發現了壹個更被動靈活的方法,就是先創建壹個Exe項目,在Form_Load事件中寫下下面的語句:

副總管

如果MsgBox("哈哈",vbOKCancel) = vbOK那麽

Shell "link2.exe "命令$

如果…就會結束

末端接頭

然後編入LinkTemp.EXE,再將LINK.EXE改名為Link2.exe,LinkTemp.EXE改名為Link.EXE。這樣,當VB調用Link.EXE時,會彈出壹個對話框,處理會被中斷。這時,妳可以有機會復制OBJ的文件。

然後我創建了壹個ActiveX DLL項目,在這個項目中我添加了壹個模塊,並創建了壹個公共函數mathadd:

公共函數mathadd(ByVal a壹樣長,ByVal b壹樣長)壹樣長

mathadd = a + b

結束功能

編譯這個項目,鏈接的時候會中斷。然後備份創建的類1。obj,Module1.obj和Project1.obj。

然後妳可以調用Link2.exe將OBJ連接到DLL。我的連接代碼是:

Link2.exe " E:\ VB dll \ class 1 . obj " " E:\ VB dll \ module 1 . obj " " E:\ VB dll \ project 1 . obj " " E:\ Program Files \ Microsoft Visual Studio \ VB98 \ VBA exe 6。LIB "/ENTRY:_ _ vbaS/EXPORT:mathadd/OUT:" e:\ VB Dll \ project ok . Dll "/BASE:0x 11000000/SUBSYSTEM:WINDOWS,4.0/VERSION:1.0/Dll/INCREMENTAL:NO/OPT:REF/MERGE:。rdata=。文本/忽略:4078

註意裏面的/ENTRY和/EXPORT開關,/EXPORT開關聲明了輸出函數mathadd。這樣就大功告成了,還可以引入其他語言,比如VB中,只要:

私有聲明函數mathadd Lib " e:\ VB dll \ project ok . dll "(ByVal a為Long,ByVal b為Long)為Long

主持人備註:

1),可以參考用Ron Petrusha寫的Visual Basic創建壹個Windows DLL(/pub/a/Windows/2005/04/26/create _ dll.html?page=1)

2)這裏有壹個中文例子,vbmakedll.zip。

老牛的意見:

我同意樓上的NewViewStudio修改後可以做壹個標準的輸出函數動態鏈接庫——其實國外已經有人做了Add-Ins在VB裏做壹個標準的DLL,用起來很方便,我也做過測試,證明是可行的。詳情請見此處:

/vb/scripts/ShowCode.asp?txt codeid = 54190 & amp;lngWId=1

  • 上一篇:Java poi怎麽導入
  • 下一篇:北大青鳥設計培訓:學習Java需要哪些基礎?
  • copyright 2024編程學習大全網