VB與VC混合程式設計中處理訊息的方法 (轉)
VB與VC混合程式設計中處理訊息的方法 (轉)[@more@]
一般的做法是將VC程式編譯成DLL,在VB中用Declare語句宣告DLL中的,例如:
Declare Function SendCommand Lib ″c:program filesdevstudiowjfprojectsHr0506dllMnsrdeHr0506dllMnsr.dll″(CmdNum As Integer) As Boolean
宣告以後,函式SendCommand 就可以當作VB自己的函式使用了。
但是,怎樣將VC中的各種訊息(例如各種底層的狀態)及時通知VB並且VB能夠及時處理呢?這是VB的一個缺陷:不能方便地處理自定義的訊息。例如在VC中自定義了兩條訊息:MW_T_DATACOME,MW_TAPI_BUSY,在C語言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);語句可以很方便地將MW_TAPI_CONNECTED訊息傳遞給窗體(窗體控制程式碼為hWnd),在主回撥函式中就可以處理了。但是要把這條訊息傳遞給VB,並讓VB處理這條訊息,並不太容易。雖然在VB5.0以上的版本中,可以定義自己的事件(EVENT),但比較麻煩。這裡介紹一種簡單的方法,讓VB巧妙地處理自定義的訊息:
1.首先將VB窗體中TextBoxText1的控制程式碼傳遞給DLL(注意:VB中的TextBox控制元件有hWnd屬性)。
VB中: ′宣告DLL中的函式
Declare Function SendhWnd Lib ″c:program filesdevstudiowjfprojectsHr0506dllMnsrdebug 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()
case Text1.text
case W_TAPI_DATACOME:
′訊息處理語句
case MW_TAPI_BUSY:
′訊息處理語句
default:
′其他處理語句
End Select
End Sub
以上方法在作者編寫的“TAPI”中使用,效果很好。
(北京 吳俊峰)
VB與VC混合中處理訊息的方法
現在越來越多的人採用VB與VC的混合程式設計:用VB開發出漂亮的介面以及外圍處理,再用VC編寫底層的各種操作,例如的操作、IO埠的操作等,VC中還可以嵌入語言進行更底層的操作。一般的做法是將VC程式編譯成DLL,在VB中用Declare語句宣告DLL中的,例如:
Declare Function SendCommand Lib ″c:program filesdevstudiowjfprojectsHr0506dllMnsrdeHr0506dllMnsr.dll″(CmdNum As Integer) As Boolean
宣告以後,函式SendCommand 就可以當作VB自己的函式使用了。
但是,怎樣將VC中的各種訊息(例如各種底層的狀態)及時通知VB並且VB能夠及時處理呢?這是VB的一個缺陷:不能方便地處理自定義的訊息。例如在VC中自定義了兩條訊息:MW_T_DATACOME,MW_TAPI_BUSY,在C語言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);語句可以很方便地將MW_TAPI_CONNECTED訊息傳遞給窗體(窗體控制程式碼為hWnd),在主回撥函式中就可以處理了。但是要把這條訊息傳遞給VB,並讓VB處理這條訊息,並不太容易。雖然在VB5.0以上的版本中,可以定義自己的事件(EVENT),但比較麻煩。這裡介紹一種簡單的方法,讓VB巧妙地處理自定義的訊息:
1.首先將VB窗體中TextBoxText1的控制程式碼傳遞給DLL(注意:VB中的TextBox控制元件有hWnd屬性)。
VB中: ′宣告DLL中的函式
Declare Function SendhWnd Lib ″c:program filesdevstudiowjfprojectsHr0506dllMnsrdebug 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()
case Text1.text
case W_TAPI_DATACOME:
′訊息處理語句
case MW_TAPI_BUSY:
′訊息處理語句
default:
′其他處理語句
End Select
End Sub
以上方法在作者編寫的“TAPI”中使用,效果很好。
(北京 吳俊峰)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987987/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VC++ MFC程式設計版本資訊控制C++C程式程式設計
- Android中的非同步訊息處理機制Android非同步
- Linux系統程式設計之訊號中斷處理(下)Linux程式設計
- Linux系統程式設計之訊號中斷處理(上)Linux程式設計
- Android應用程式訊息處理機制Android
- linux網路程式設計中的errno處理Linux程式設計
- 3-Windows程式設計 -視窗與訊息Windows程式設計
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 使用FUTURE 中的訊息避免計劃排程的批處理作業 - CodeOpinion
- linux中的訊號處理與SROPLinux
- Kafka中消費者延遲處理訊息Kafka
- 處理檔案上傳時的訊息格式轉換問題
- MPLS RSVP訊息處理——VecloudCloud
- Objective-C Runtime (二):方法與訊息轉發Object
- KafkaConsumer對於事務訊息的處理Kafka
- .net core 訊息流處理流程
- 如何處理錯誤訊息PleaseinstalltheLinuxkernelheaderfilesLinuxHeader
- Python網路程式設計(子程式的建立與處理、簡單群聊工具)Python程式設計
- OPC Server示例教程:VC#和VB.NET中的簡單APIServerAPI
- 在spring boot中訊息推送系統設計與實現Spring Boot
- RocketMQ的事務訊息處理【half-message】MQ
- CUDA 8的混合精度程式設計程式設計
- 【IDL】 IDL與C#混合程式設計技術C#程式設計
- C++:與C混合程式設計 CMake undefined reference toC++程式設計Undefined
- 聊聊訊息中心的設計與實現邏輯
- 程式中的敏感資訊如何優雅的處理?
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- 系統程式設計——IPC訊息佇列程式設計佇列
- Python程式設計中一些常見的錯誤和處理方法Python程式設計
- 訊息中介軟體消費到的訊息處理失敗怎麼辦?
- 程式設計師程式設計時的簡單方法與技巧程式設計師
- 處理python中的訊號Python
- Objective-C中的訊息轉發Object
- 原始碼分析:Android訊息處理機制原始碼Android
- 如何用 Golang 的 channel 實現訊息的批量處理Golang
- 如何用 Golang 的 channel 實現訊息的批次處理Golang
- 高度整合的可程式設計邏輯器件fpga晶片處理能力與作用程式設計FPGA晶片
- 程式設計實習MOOC/6908/C:簡單的學生資訊處理程式實現程式設計