怎樣用vb編寫.dll動態鏈結庫檔案
編號:qa000507
建立日期:
2023年2月10日
最後修改日期:
2023年8月13日
所屬類別:
visual basic - 其他方面
vb6.0
windosnt
請問怎樣用vb編寫.dll動態鏈結庫檔案,能否有這方面的例子。
(jinbuyu)
vb一般可以生成兩種特殊的dll,乙個是activex dll和activex control(*.ocx)。這兩種dll都是vb支援的標準型別,在vb自身的例子中有,你可以參考。更詳細的介紹可以參考我寫的《visual basic程式設計晉級:activex控制項》(http://china.zealsoft.com/articles/vbactivex/
)一書的「第十六章 其他activex部件 」。
newviewstudio的意見:
vb中建立的dll只是com元件,無法作為輸出函式的dll,其實這只是個錯誤的說法。其實ms非常狡猾,如果你是個vb瘋狂發燒友的話,應該早就狂試出這種可以建立輸出函式的dll的方法。
vb編譯檔案實際上採取了兩次編譯的方法,首先是呼叫c2.exe產生*.obj檔案,然後呼叫link.exe連線。如果在link的時候新增export選項,實際上是可以輸出函式的。但是,在vb的工程選項中將這些遮蔽了。而且過分的是:vb在build完成後會將obj檔案刪除,這樣就無法手動通過link來建立我們需要的dll了。不過我找到乙個比較齷鹺的變通的方法,就是先建立乙個exe工程,在form_load事件裡面寫下面的語句:
sub main
if msgbox("哈哈", vbokcancel) = vbok then
shell "link2.exe " & command$
end if
end sub
然後編譯為linktemp.exe,接下來將link.exe改名為link2.exe,將linktemp.exe改名為link.exe。這樣在vb呼叫link.exe時會彈出對話方塊,處理就會中斷。這時就可以有機會將obj檔案拷貝出來了。
然後我建立了乙個activex dll工程,在這個工程裡面新增乙個module並建立乙個public函式mathadd:
public function mathadd(byval a as long, byval b as long) as long
mathadd = a + b
end function
編譯這個工程,在link的時候就會中斷。然後把建立的class1.obj、module1.obj、project1.obj備份出來。
然後就可以呼叫link2.exe連線obj到dll了,我的連線**是:
link2.exe "e:/vbdll/class1.obj" "e:/vbdll/module1.obj" "e:/vbdll/project1.obj" "e:/program files/microsoft visual studio/vb98/vbaexe6.lib" /entry:__vbas /export:mathadd /out:"e:/vbdll/projectok.dll" /base:0x11000000 /subsystem:windows,4.0 /version:1.0 /dll /incremental:no /opt:ref /merge:.rdata=.text /ignore:4078
注意裡面的/entry和/export開關,/export開關宣告了輸出函式mathadd。這樣就大功告成了,可以被其他語言引入,例如在vb中,只需要:
private declare function mathadd lib "e:/vbdll/projectok.dll" (byval a as long, byval b as long) as long
主持人注:
1)更詳細地說明,可以參考ron petrusha寫的creating a windows dll with visual basic(http://www.windowsdevcenter.com/pub/a/windows/2005/04/26/create_dll.html?page=1
) 2)這裡有乙個中文例子老牛的意見:
同意樓上newviewstudio的意見——經過變通,vb可以做出輸出函式的標準動態鏈結庫——其實,國外早已經有人做出了在vb中製作標準dll的add-ins了,使用非常方便,我也做過測試,證明確實可行。詳情請看這裡:
怎樣用VB編寫 DLL動態鏈結庫檔案
vb6.0 windosnt 請問怎樣用vb編寫.dll動態鏈結庫檔案,能否有這方面的例子。jinbuyu vb一般可以生成兩種特殊的dll,乙個是activex dll和activex control ocx 這兩種dll都是vb支援的標準型別,在vb自身的例子中有,你可以參考。更詳細的介紹可以參...
怎樣用VB編寫 DLL動態鏈結庫檔案
vb中建立的dll只是com元件,無法作為輸出函式的dll,其實這只是個錯誤的說法。其實ms非常狡猾,如果你是個vb瘋狂發燒友的話,應該早就狂試出這種可以建立輸出函式的dll的方法。vb編譯檔案實際上採取了兩次編譯的方法,首先是呼叫c2.exe產生 obj檔案,然後呼叫link.exe連線。如果在l...
怎樣用VB編寫 DLL動態鏈結庫檔案
vb6.0 windosnt 請問怎樣用vb編寫.dll動態鏈結庫檔案,能否有這方面的例子。jinbuyu vb一般可以生成兩種特殊的dll,乙個是activex dll和activex control ocx 這兩種dll都是vb支援的標準型別,在vb自身的例子中有,你可以參考。更詳細的介紹可以參...