VB與VC通信初探(一)

在使用VB調用VC寫的DLL的時候,可以實現一些VB不能實現或者很難實現的功能,但是,因爲VBVC之間的數據類型並不總是完全對應的,所以,在進行參數傳遞的時候,就需要進行類型轉換了。下面我將通過逐步的推進的方法,來看看如何達到VBVC之間的通信。

 

 

    首先,看一個簡單的例子。

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調用程序,雖然簡單,但是已經實現了VBDLL之間的數據傳遞了,在這裏要注意的是它們之間的數據類型,布爾類型的數據在VC中使用的關鍵字是Boolean,而在VC中使用的關鍵字則是bool

 

    由於VBVC之間的數據類型沒有相同的關鍵字,爲了方便,下面列出常用數據類型在VCVB中分別使用的關鍵字以及它們之間的對應關係:

 

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 類型的表達式

 

 

好了,現在我們已經建立了基本的通信模式了,並且實現了兩個簡單的通信過程,該休息一下了,之後再來看看更復雜的通信該如何去實現了!(待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章