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