怎樣用VB編寫 DLL動態鏈結庫檔案

2021-08-22 03:46:12 字數 1654 閱讀 3816

vb6.0

windosnt

請問怎樣用vb編寫.dll動態鏈結庫檔案,能否有這方面的例子。

(jinbuyu)

vb一般可以生成兩種特殊的dll,乙個是activex dll和activex control(*.ocx)。這兩種dll都是vb支援的標準型別,在vb自身的例子中有,你可以參考。更詳細的介紹可以參考我寫的《visual basic程式設計晉級:activex控制項》(一書的「第十六章 其他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 /vers

注意裡面的/entry和/export開關,/export開關宣告了輸出函式mathadd。這樣就大功告成了,可以被其他語言引入,例如在vb中,只需要:

private declare function mathadd lib "e:/vbdll/projectok.dll" (byval a as long, byval b as long) as long

怎樣用VB編寫 DLL動態鏈結庫檔案

怎樣用vb編寫.dll動態鏈結庫檔案 編號 qa000507 建立日期 1999年2月10日 最後修改日期 2006年8月13日 所屬類別 visual basic 其他方面 vb6.0 windosnt 請問怎樣用vb編寫.dll動態鏈結庫檔案,能否有這方面的例子。jinbuyu vb一般可以生成...

怎樣用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...