| 導購 | 订阅 | 在线投稿
分享
 
 
 

VB與VC混合編程中處理消息的方法

來源:互聯網  2008-06-01 01:10:27  評論

現在越來越多的人采用VB與VC的混合編程:用VB快速開發出漂亮的界面以及外圍處理程序,再用VC編寫底層的各種操作,例如內存的操作、IO端口的操作等,VC中還可以嵌入彙編語言進行更底層的操作。

一般的做法是將VC程序編譯成DLL,在VB中用Declare語句聲明DLL中的函數,例如:

Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.dll″(CmdNum As Integer) As Boolean

聲明以後,函數SendCommand 就可以當作VB自己的函數使用了。

但是,怎樣將VC中的各種消息(例如各種底層的狀態)及時通知VB並且VB能夠及時處理呢?這是VB的一個缺陷:不能方便地處理自定義的Windows消息。例如在VC中自定義了兩條消息:MW_TAPI_DATACOME,MW_TAPI_BUSY,在C語言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);語句可以很方便地將MW_TAPI_CONNECTED消息傳遞給窗體(窗體句柄爲hWnd),在主回調函數中就可以處理了。但是要把這條消息傳遞給VB,並讓VB處理這條消息,並不太輕易。雖然在VB5.0以上的版本中,可以定義自己的事件(EVENT),但比較麻煩。這裏介紹一種簡單的方法,讓VB巧妙地處理自定義的消息:

1.首先將VB窗體中TextBox控件Text1的句柄傳遞給DLL(注重:VB中的TextBox控件有hWnd屬性)。

VB中: ′聲明DLL中的函數

Declare Function SendhWnd Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\ Hr0506dllMnsr.dll″ ((ByVal hWnd As Long) As Boolean

′傳遞text1的句柄

SendhWnd(text1.hWnd)

VC中://句柄接收函數

declspec(dlleXPort) BOOL GethWnd(HWND hWnd1)

{ hWnd=hWnd1;

if (hWnd==NULL)

{ return FALSE; }

return TRUE;}

2.在VC中用API函數SetWindowText取代PostMessage直接發送消息給VB中的Text1控件:

SetWindowText(hWnd,″ MW_TAPI_DATACOME ″);

3.在Text1_Change事件中處理消息:

Private Sub Text1_Change()

Select case Text1.text

case W_TAPI_DATACOME:

′消息處理語句

case MW_TAPI_BUSY:

′消息處理語句

default:

′其他處理語句

End Select

End Sub

以上方法在作者編寫的「TAPI遠程監控系統」中使用,效果很好。

 現在越來越多的人采用VB與VC的混合編程:用VB快速開發出漂亮的界面以及外圍處理程序,再用VC編寫底層的各種操作,例如內存的操作、IO端口的操作等,VC中還可以嵌入彙編語言進行更底層的操作。   一般的做法是將VC程序編譯成DLL,在VB中用Declare語句聲明DLL中的函數,例如:   Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.dll″(CmdNum As Integer) As Boolean   聲明以後,函數SendCommand 就可以當作VB自己的函數使用了。   但是,怎樣將VC中的各種消息(例如各種底層的狀態)及時通知VB並且VB能夠及時處理呢?這是VB的一個缺陷:不能方便地處理自定義的Windows消息。例如在VC中自定義了兩條消息:MW_TAPI_DATACOME,MW_TAPI_BUSY,在C語言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);語句可以很方便地將MW_TAPI_CONNECTED消息傳遞給窗體(窗體句柄爲hWnd),在主回調函數中就可以處理了。但是要把這條消息傳遞給VB,並讓VB處理這條消息,並不太輕易。雖然在VB5.0以上的版本中,可以定義自己的事件(EVENT),但比較麻煩。這裏介紹一種簡單的方法,讓VB巧妙地處理自定義的消息:   1.首先將VB窗體中TextBox控件Text1的句柄傳遞給DLL(注重:VB中的TextBox控件有hWnd屬性)。   VB中: ′聲明DLL中的函數   Declare Function SendhWnd Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\ Hr0506dllMnsr.dll″ ((ByVal hWnd As Long) As Boolean   ′傳遞text1的句柄   SendhWnd(text1.hWnd)   VC中://句柄接收函數    declspec(dlleXPort) BOOL GethWnd(HWND hWnd1)   { hWnd=hWnd1;   if (hWnd==NULL)   { return FALSE; }   return TRUE;}   2.在VC中用API函數SetWindowText取代PostMessage直接發送消息給VB中的Text1控件:   SetWindowText(hWnd,″ MW_TAPI_DATACOME ″);   3.在Text1_Change事件中處理消息:   Private Sub Text1_Change()   Select case Text1.text   case W_TAPI_DATACOME:   ′消息處理語句   case MW_TAPI_BUSY:   ′消息處理語句   default:   ′其他處理語句   End Select   End Sub   以上方法在作者編寫的「TAPI遠程監控系統」中使用,效果很好。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有