vb与vc混合编程中的消息处理方法
一般做法是将VC程序编译到DLL,并在DLL用VB声明语句来声明函数:
函数声明SendCommand库C:程序文件 wjfprojects DevStudio hr0506dllmnsr 调试 hr0506dllmnsr.dll (cmdnum为整数)布尔。
申报之后,功能SendCommand可以作为一个VB自带的功能。
但是,如何通知VB VC中的各种消息,例如各种底层状态,以及VB是否能及时处理它呢这是一个VB的缺点:不方便处理windows消息。例如,在VC自定义两个信息:mw_tapi_datacome,mw_tapi_busy,C,PostMessage(HWND,mw_tapi_connected,0, 0);语句可以很方便地将mw_tapi_connected消息给窗口(为窗口的窗口句柄),可以在主要的回调函数来处理。但是不容易传递信息给VB让VB处理消息。虽然在超过VB5.0的版本,你可以定义自己的事件(事件),但更多的麻烦。这是一个简单的方法来让VB处理自定义消息巧妙地:
1。首先,在VB窗体TextBox控件text1句柄传递给动态链接库(注:VB中的TextBox控件具有hwnd属性)。
在VB中:''在DLL声明函数
函数声明sendhwnd库C:程序文件 wjfprojects DevStudio hr0506dllmnsr 调试 hr0506dllmnsr.dll ((ByVal hWnd长)窗口。
Handle of 'text1'
sendhwnd(text1。hWnd)
vc:处理接收函数
declspec(dllexport)布尔gethwnd(窗口一的句柄)
{ hwnd =一的句柄;
如果(hwnd = = null)
{返回false;}
返回true;}
2。在VC,使用API函数SetWindowText函数代替PostMessage发送的消息直接在VB的控制:
SetWindowText函数(HWND,mw_tapi_datacome );
三.在text1_change事件处理消息:
私有子text1_change()
选择案例text1.text
案例w_tapi_datacome:
消息处理语句
案例mw_tapi_busy:
消息处理语句
违约:
其他处理语句
最后选择
端子
以上方法是用在TAPI的远程监控系统的作者写的,而且效果很好。