我用的軟體是Visual C++ 2005 和 Visual Basic 6.0 Professional
假設我的專案名稱為dlltest
首先,開啟vc++,在「新增專案」中選擇「Win32專案」,在專案精靈中選擇 dll 選項,以及勾選「空專案」,然後按下「完成」,精靈就幫我們製作了一個dll專案檔
因為這個專案檔是空的,所以沒有檔案,我們必須自行新增一個.cpp檔案,一個.h標頭檔還有一個.def定義檔,必須要有這個定義檔,vb6才可以使用這個dll
注意.cpp及.h的檔名必須相同
記得在header檔中include必要的檔案
# include <cstdlib>
# include <windows.h>
在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或上網搜尋。
0 留言:
張貼意見