VB界面,VC核心

原帖地址:http://topic.youkuaiyun.com/t/20020613/22/801995.html

 

以下的这篇文章,其实已在优快云出现过,现将它重提,希望对苦于界面或VB & VC混合编程中遇到的问题有帮助。  
   
   
  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远程监控系统”中使用,效果很好。  
  (北京 吴俊峰)

 

6 楼 zdhe(zdhe) 回复于 2002-06-13 23:41:16 得分 10

implement   VC   com   interface   is   better.   then   VB   can   freely   use   VC   built   control.    
   
  this   method   is   OK.   but   not   good   enough.  
   
  but   ,   get   HWND   and   transfer   to   Vc,   in   VC   use   SetWindowLong   to   change   winproc,   then   you   can   do   every   thing   in   VC   freely...  

 

 

原帖地址:http://topic.youkuaiyun.com/t/20010505/00/112369.html

 

19 楼 arbiter(同济流氓) 回复于 2001-05-06 18:47:00 得分 15

给你实质一点回答,慢慢推敲其中的奥妙,好过楼上几位的空谈吧。哈哈……  
    VB与VC的混合编程  
   
  VC部分:  
  VC的Projects中创建Win32   Dynamic-link   Library(dll)  
  创建add.cpp文件添加以下代码:  
  double   __stdcall   add(double,double);  
  double     multiplication(double,double);  
  double   __stdcall   add(double   i,double   j)  
  {  
          i=multiplication(i,j);  
          return   (i+j);  
  }  
  double     multiplication(double   i,double   j)  
  {  
          return   i*j;  
  }  
  创建add.def文件添加以下代码(用于找到程序入口点为add函数):  
  EXPORTS    
            add   @1    
  编译上述cpp文件生成add.dll  
   
  VB部分:  
  添加模块Module1添加以下代码(用于声明调用add.dll):  
  Public   Declare   Function   add   Lib   "add"   (ByVal   i   As   Double,   ByVal   j   As   Double)   As   Double  
  VB窗口上添加text1   text2   text3   command1三个控件  
  代码窗口添加以下代码:  
  Private   Sub   Command1_Click()  
  Dim   a   As   Double,   b   As   Double,   c   As   Double  
  a   =   Text1:   b   =   Text2  
  c   =   add(a,   b)  
  Text3   =   c  
  End   Sub  
   
  连接:  
  将VC生成的add.dll复制到VB所在目录下(或者system目录下)(dll文件是隐藏需要显示)  

         

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值