首先,看一個簡單的例子。
VC中的程序:
extern "C" _declspec(dllexport) void ReadString(void)
{
//函數功能
}
將這個VC程序編譯成DLL程序供VB調用(假設生成的為commication.dll)
VB中的程序:
……………………
Private Declare Function ReadString Lib "commication.dll" ()
……………………
call ReadString
在這裡,我們實現了一個簡單的通信,即在VC中寫了一個DLL,然後再在VB中調用了這個DLL,但是,在這次的通信中,實際上他們之間沒有傳遞任何數據,僅僅是VB調用了DLL,從而使得commication.dll中的函數ReadString()函數執行。這種通信實現是非常簡單,所以他完成的功能也就非常的簡單,然而我們的要求肯定不止於此。
現在就讓我們來實現一個使用DLL來處理VB中的數據的例子,並且將處理結果返回給VB程序:
VC中的程序:
extern "C" _declspec(dllexport) bool ReadString(bool receive)
{
if(receive==true)
return true;
else
return false;
}
VB中的程序:
……………………
Private Declare Function ReadString Lib "commication.dll" (ByVal send As Boolean) as Boolean
……………………
Dim result As Boolean
Dim send As Boolean
send = False
result = ReadString(send)
If result Then
MsgBox "The return value is 'true'"
Else
MsgBox "The return value is 'false'"
End If
在這次的通信過程中,我們還是實現了一個很簡單的通行過程,在DLL中,根據VB調用的時候傳遞進來的參數將接收到的參數返回給了VB調用程序,雖然簡單,但是已經實現了VB與DLL之間的數據傳遞了,在這裡要注意的是它們之間的數據類型,布爾類型的數據在VC中使用的關鍵字是Boolean,而在VC中使用的關鍵字則是bool。
由於VB與VC之間的數據類型沒有相同的關鍵字,為了方便,下面列出常用數據類型在VC與VB中分別使用的關鍵字以及它們之間的對應關系:
c中的數據類型 VB中的聲明 結果
ATOM ByVal variable As Integer 結果為Integer 類型的表達式
BOOL ByVal variable As Boolean 結果為 Long 類型的表達式
BYTE ByVal variable As Byte 結果為 Byte 類型的表達式
CHAR ByVal variable As Byte 結果為 Byte 類型的表達式
COLORREF ByVal variable As Long 結果為 Long 類型的表達式
DWord ByVal variable As Long 結果為 Long 類型的表達式
HWND, HDC, HMENU ByVal variable As Long 結果為 Long 類型的表達式等Windows 句柄
INT, UINT ByVal variable As Long 結果為 Long 類型的表達式
LONG ByVal variable As Long 結果為 Long 類型的表達式
LPARAM ByVal variable As Long 結果為 Long 類型的表達式
LPDWord variable As Long 結果為 Long 類型的表達式
LPINT, LPUINT variable As Long 結果為 Long 類型的表達式
LPRECT variable As type 自定義類型的任意變量
LPSTR, LPCSTR ByVal variable As String 結果為 String 類型的表達式
LPVOID variable As Any 任何變量(在傳遞字符串的時候使用ByVal)
LPWord variable As Integer 結果為Integer 類型的表達式
LRESULT ByVal variable As Long 結果為 Long 類型的表達式
NULL As Any 或 ByVal Nothing 或 ByVal variable As Long ByVal 0& 或 VBNullString
SHORT ByVal variable As Integer 結果為Integer 類型的表達式
VOID Sub procedure 不可用
Word ByVal variable As Integer 結果為Integer 類型的表達式
WPARAM ByVal variable As Long 結果為 Long 類型的表達式
好了,現在我們已經建立了基本的通信模式了,並且實現了兩個簡單的通信過程,該休息一下了,之後再來看看更復雜的通信該如何去實現了