程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VB與VC通信初探(一)

VB與VC通信初探(一)

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved