我在两个VB程序间发送自定义消息好用,但是
1)VB程序间利用WM_COPYDATA发送数据,总是得不到数据
2)VC向VB程序发自定义消息也发不出来。
现在急用,各位援手!部分源代码
'接收者————利用子类化
Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wparam As Long, ByVal lparam As Long) As Long    Select Case msg
        Case WM_USER + 100
             MsgBox "WM_USER+100"//VB对VB好用,VC发的消息就接不着
        Case WM_COPYDATA
             Dim CD As COPYDATASTRUCT
             Dim s As String
             Call CopyMemory(CD, ByVal lparam, Len(CD))
             Call CopyMemory(s, ByVal CD.lpData, CD.dwData)
             MsgBox s//VB对VB时,可以收到消息,但是乱码
    
        Case Else
             WndProc = CallWindowProc(prevWndProc, hwnd, msg, wparam, lparam)
    End SelectEnd Function
发送者代码(Text1.Text内容为接收者的Me.HWnd数字):
   Dim s As String
   s="hii"
   Dim cd As COPYDATASTRUCT
   cd.dwData = Len(s)
   cd.lpData = VarPtr(s)   ret = SendMessage(CLng(Text1.Text), WM_USER + 100, 0, 0)   Const WM_COPYDATA = &H4A
   ret = SendMessage(CLng(Text1.Text), WM_COPYDATA, 0, VarPtr(cd))

解决方案 »

  1.   

    先看看这个:
    http://www.epoint.cn/Article_Show.asp?ArticleID=65
    http://www.legalsoft.com.cn/Articles/ArticleBrowse.asp?idArticle=372
      

  2.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/datacopy/usingdatacopy.asp
      

  3.   

    Dim s As String
       s="hii"
       Dim cd As COPYDATASTRUCT
       cd.dwData = Len(s)
       cd.lpData = VarPtr(s)'这句有问题问题在于,s为字串,要用strptr获得地址而不是用varptr
      

  4.   

    thanks!
    VB到VB的我已经搞定了,就是VC发给VB的,一点反应都没有,郁闷~~~C++发送消息的代码:
    long hwnd;
    printf("input hwnd: ");
    scanf("%ld",&hwnd);//输入目标窗体的me.hwnd值
    SendMessage((HWND)hwnd,WM_USER+100,(WPARAM)0,(LPARAM)0);
    接收窗体同VB对VB的情况,但就是没反应:(,不知道问题出在那里
      

  5.   

    WM_USER 申明了没有?
    未申明常量/变量都是作为0处理
      

  6.   

    Private Const WM_USER = &H400
      

  7.   

    to zyl910:
    正招!!原来VC中WM_USER有值,而VB中没有申明,认为为0