2009年12月31日 星期四

用Visual C++製作VB6可使用的dll

用Visual C++製作VB6可使用的dll
作者: Timothy Lin 於 下午10:40
vb6是一套相當好用的程式設計工具,但是它的缺點就是速度慢。所以,如果需要大量運算的時候,就可以使用C++來撰寫這些運算的函式,vb只要呼叫使用就可以了。我在這裡要說明使用Visual C++製作dll給vb6使用的方法,希望對需要用的人有幫助。




我用的軟體是Visual C++ 2005 和 Visual Basic 6.0 Professional


假設我的專案名稱為dlltest


首先,開啟vc++,在「新增專案」中選擇「Win32專案」,在專案精靈中選擇 dll 選項,以及勾選「空專案」,然後按下「完成」,精靈就幫我們製作了一個dll專案檔


因為這個專案檔是空的,所以沒有檔案,我們必須自行新增一個.cpp檔案,一個.h標頭檔還有一個.def定義檔,必須要有這個定義檔,vb6才可以使用這個dll


注意.cpp及.h的檔名必須相同


記得在header檔中include必要的檔案


# include

# include
在cpp檔中include header檔

# include "dlltest.h"
撰寫函式時,加入「WINAPI」這個字,例如:

dlltest.h

int WINAPI fntest(void);

int WINAPI add1(int number);


dlltest.cpp

int WINAPI fntest(void){

return 0;

}

int WINAPI add1(int number){

return number+1;

}



寫完所有函式後,下一個步驟就是撰寫def定義檔
在def中先加上EXPOTS,然後再把每一個函式的「名稱」逐行加上去。
dlltest.def

EXPORTS

fntest

add1

...



--------------------------------------------------------------------------------
接下來就是vb6的部分
在vb的專案中新增一個模組(module)
在這個module裡面使用以下方法來宣告函式
(注意以下是同一行,不要寫成多行)


Declare Function vb使用時的函式名稱 Lib "dll檔名" Alias "dll裡的函式名稱" (參數) As 回傳型態

vb使用時的函式名稱就是在vb中呼叫這個函式時要使用的名稱。

dll檔名就是剛才用vc++製作並放到system32目錄的dll檔名。

dll裡的函式名稱就是剛才那個dll中的函式名稱,如果與第一項相同就不用寫。

參數就是這個函式要用到的參數。
回傳型態就是這個函式的回傳型態。

例如如果我們要呼叫剛才寫的add1的話就可以這樣寫

Module1.bas

Declare Function LongAdd1 Lib "dlltest" Alias "add1" (ByVal n as Long) As Long


Form1.frm

Private Sub Form_Load()

Form1.Caption = LongAdd1(1)

End Sub


要注意的是,vc++裡面的 int 和 long 在 vb裡面都是 long。還有其他參數轉換的問題請見MSDN或上網搜尋。

參考來源:

"用Visual C++製作VB6可使用的dll"
- Timothy's Workspace: 用Visual C++製作VB6可使用的dll (在「Google 網頁註解」中檢視)

沒有留言:

張貼留言