VB也可以做標準dll了

2021-04-26 13:13:41 字數 1361 閱讀 9196

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 

kubectl也可以擴充套件了

kubernetes作為乙個開放式式的分布式系統,其提供了多種擴充套件機制如crd,service catalog等給使用者做系統功能增強以及外部系統對接等。當時以往版本都是以擴充套件服務端的功能,現在剛發布的全新版本1.12.0已經可以支援kubectl命令列的擴充套件了。下面將通過乙個簡單例子來...

VB中建立可以輸出函式的DLL

vb中建立的dll只是 元件,無法作為輸出函式的dll。今天從袁波 搞到一種可以建立輸出函式的dll的方法。vb編譯檔案實際上採取了兩次編譯的方法,首先是呼叫c2.exe產生obj檔案,然後呼叫link.exe連線。如果在link的時候新增export選項,實際上是可以輸出函式的。但是,在vb的工程...

VB中建立可以輸出函式的DLL

vb中建立可以輸出函式的dll vb中建立的dll只是com元件,無法作為輸出函式的dll。今天從袁波 搞到一種可以建立輸出函式的dll的方法。vb編譯檔案實際上採取了兩次編譯的方法,首先是呼叫c2.exe產生obj檔案,然後呼叫link.exe連線。如果在link的時候新增export選項,實際上...