VB調用VC的DLL
如何實現VC生成DLL,在VB中調用DLL
先說說VC++的編程。首先在VC++中生成Win32 DLL工程。在這個工程中添加幾個函數供VB用戶調用。一個DLL中的函數要想被VB調用,必須滿足兩個條件:一是調用方式為stdcall,另一個是必須是export的。要做到第一條,只須在函數聲明前加上__stdcall關鍵字。如:
short __stdcall sample(short nLen, short *buffer)
要做到第二條,需要在*.def文件中加上如下的幾行:
EXPORTS
sample @1
這裡的sample是你要在VB中調用的函數名,@1表示該函數在DLL中的編號,每個函數都不一樣。注意這裡的函數名是區分大小寫的。至於你說的需要傳遞大量數據,可以這樣做,在VB中用一個數組存放數據,然後將該數組的大小和地址傳給VC(至於如何在VB中編程我會在下面介紹)。就象上面的例子,nLen是數組大小,buffer是數組地址,有了這兩條,你可以象使用VC的數組一樣進行處理了。至於輸出圖形,可以生成WMF或BMP格式,讓VB調用。不過,我認為也可以直接輸出到視窗,只要VB將窗口的句柄hWnd和hDC以及視窗的繪圖位置(VB和VC采用的坐標系必須一致才行)傳給VC就行了。而VB的AutoRedraw屬性必須為False,在Paint事件中調用VC的繪圖程序。
再談談VB的編程。VB調用DLL的方法和調用Windows API的方法是一樣的,一般在VB的書中有介紹。對於上面一個例子,先要聲明VC函數:
Declare Function sample Lib "mydll.dll" (ByVal nLen As Integer, buffer As Integer) As Integer
這裡mydll.dll是你的dll的名字。你可能已經注意到了兩個參數的聲明有所不同,第一個參數加上了ByVal。規則是這樣的:如果在VC中某個參數聲明為指針和數組,就不加ByVal,否則都要加上ByVal。在VB中調用這個函數采用這樣的語法:
sample 10, a(0)
這裡的a()數組是用來存放數據的,10為數組長度,這裡的第二個參數不能是a(),而必須是要傳遞的數據中的第一個。這是VB編程的關鍵。