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

現在越來越多的人采用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混合編程中處理消息的方法 http://www.tongyi.net 點擊:401   現在越來越多的人采用VB與VC的混合編程:用VB快速開發出漂亮的界面以及外圍處理程序,再用VC編寫底層的各種操作,例如內存的操作、IO端口的...查看完整版>>VB與VC混合編程中處理消息的方法
 
VB與VC混合編程中處理消息的方法
VB與VC混合編程中處理消息的方法 http://www.tongyi.net 點擊:401   現在越來越多的人采用VB與VC的混合編程:用VB快速開發出漂亮的界面以及外圍處理程序,再用VC編寫底層的各種操作,例如內存的操作、IO端口的...查看完整版>>VB與VC混合編程中處理消息的方法
 
C#的消息處理方法
在C#中,程序采用了的驅動采用了事件驅動而不是原來的消息驅動,雖然.net框架提供的事件已經十分豐富,但是在以前的系統中定義了豐富的消息對系統的編程提供了方便的實現方法,因此在C#中使用消息有時候還是大大提高...查看完整版>>C#的消息處理方法
 
通用權限管理工具,支所有ADO(包括ODBC)支持的數據庫,不管用什麽編程都行,VC/BCB/VB/PB/Delphi
通用權限管理工具,支所有ADO(包括ODBC)支持的數據庫,不管用什麽編程都行,VC/BCB/VB/PB/Delphi 通用權限管理工具,支所有ADO(包括ODBC)支持的數據庫,不管用什麽編程都行,VC/BCB/VB/PB/Delphi 下面是一...查看完整版>>通用權限管理工具,支所有ADO(包括ODBC)支持的數據庫,不管用什麽編程都行,VC/BCB/VB/PB/Delphi
 
[今天的編程日記, 在vb中使用vc編譯的dll實例]
18:07 2003-12-3今天,仿照著書,我使用vc編了一個動態鏈接庫(dll)--a.dll,然後將它複制到windows/system/目錄下面,之後建立了一個vb程序,並在程序中聲明了a.dll中的函數add(),實現兩個整形數的加法運算。實現...查看完整版>>[今天的編程日記, 在vb中使用vc編譯的dll實例]
 
通用權限管理工具,支所有ADO(包括ODBC)支持的數據庫,不管用什麽編程都行,VC/BCB/VB/PB/Delphi
下面是一部分說明:請細請到這裏下載通用權限管理工具的創作動機權限管理是MIS軟件中很重要的一環。很多國內較出名的MIS軟件廠商都設計了較完善的也具有自己特色的權限管理模塊。但對于很多沒那麽規範的軟件商(包括個...查看完整版>>通用權限管理工具,支所有ADO(包括ODBC)支持的數據庫,不管用什麽編程都行,VC/BCB/VB/PB/Delphi
 
VC錯誤的處理機制-------《windows核心編程》讀書筆記(1)
從系統內部來講,當一個Windows函數檢測到一個錯誤時,它會使用一個稱爲線程本地存儲器(thread-localstorage)的機制。當函數返回時,它的返回值就能指明一個錯誤已經發生。若要確定這是個什麽錯誤,請調用GetLastErr...查看完整版>>VC錯誤的處理機制-------《windows核心編程》讀書筆記(1)
 
用C與腳本的混合編程來處理配置文件
  在linux上寫程序、做網管的人,或多或少都會幾種腳本。腳本語言靈活的變量類型、強大的正則表達式處理能力,再加上linux系統本身的管道、重定向以及豐富的命令行工具,讓你編程起來遊刃有余。而C語言固然有種種優...查看完整版>>用C與腳本的混合編程來處理配置文件
 
簡易的VC編程調試方法
我不知道各位在編程過程中是用什麽方法調試程序的,不過象我這種不會用VC調試器的人只好用“MessageBox”什麽的來進行跟蹤了,要是碰到麻煩一點的,只好用ollydbg來調試了。與其花時間去搞懂VC下的那些...查看完整版>>簡易的VC編程調試方法
 
 
回到王朝網路移動版首頁