现在越来越多的人采用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混合编程中处理消息的方法
作者:转载自:ASP教程更新时间:2009-8-2
- 视频教程在线观看
- Visual Basic从入门到精通视频教程
- 李天生SQL2008数据库视频教程
- 李天生二级VF考试视频教程
- 李天生Java软件开发高级视频教程
- 李天生Java软件开发高级教程
- C++从入门到精通视频教程
- 鹏哥C#语言从入门到高级视频教程
- 李天生JavaScript+JQuery视频教程
- C#教程:路径中的空格问题
- Java教程:JAVA时间格式化处理
- Java教程:Java终止函数详解
- Java教程:内存泄漏
- Java教程:IO流之对象流应用
- Java教程:垃圾回收算法4
- Java教程:垃圾回收算法3
- Java教程:垃圾回收算法2
- Java教程:垃圾回收算法 1
- C#教程:16进制转换10进制
- C#教程:账号加密算法
- C#教程:C#运算符重载
- C#教程:获得时间段
- VB.net教程:编写文字加解密程序
- Java教程:处理数据库超时与死锁
- C#教程:借助API实现黑盒自动化测试
- C#教程:分析Dialog控件
- C#教程:调用外部程序
- C#教程:读取数据库返回泛型
- C#教程:字符串截取方法
- C#教程:删除list中的元素
- C#教程:附加数据库
- C#教程:保留小数位
- Delphi教程:数据采集与串口通信测
- JAVA教程:多线程
- VB教程:实例问题一则
- vb教程:实现多线程!
- vb教程:实现JPEG数据压缩
- VB教程:VB中调用VC++开发的DLL
- JAVA教程:UDP数据广播的局域网络会
- C语言教程:C 程序开发经典实例之7
- C语言教程:实现的闹钟程序
- 如何利用用C语言来解决鬼谷算题
- C语言教程:C 程序开发经典实例之一
- C语言教程:C 程序开发经典实例之2
- C语言教程:C 程序开发经典实例之3
- C语言教程:C 程序开发经典实例之4
- C语言教程:C 程序开发经典实例之6
- C语言教程:C 程序开发经典实例之8
- C语言教程:C 程序开发经典实例之9
- C语言教程:C 程序开发经典实例之1
- C语言教程:C语言程序设计技巧
- C语言教程:C 程序开发经典实例之5
- C语言教程:入门基础
- 如何在VB.net中应用HOOK(二)
- 如何在VB.NET中取得计电脑的硬件信
- C语言教程:写好C程序的10条秘籍
- C语言教程:入门基础2
- C语言教程:C语言入门
- VB.NET实例:删除文件时出错
- VB.NET实例:求一个因式分解的程序
- 关于MDI多文档编辑器的问题
- 如何产生不同的随机数?
- VB第三方控件实现XP资源管理器垂直
- VB第三方控件实现XP资源管理器垂直
- Delphi基础教程:开发分隔线组件
- Delphi基础教程:在程序中调用自己
- Delphi基础教程:面向组件的系统开
- Delphi基础教程:创建VCL 构件及开
- Delphi基础教程:编写ASP中的Activ