我在两个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)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))
http://www.epoint.cn/Article_Show.asp?ArticleID=65
http://www.legalsoft.com.cn/Articles/ArticleBrowse.asp?idArticle=372
s="hii"
Dim cd As COPYDATASTRUCT
cd.dwData = Len(s)
cd.lpData = VarPtr(s)'这句有问题问题在于,s为字串,要用strptr获得地址而不是用varptr
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的情况,但就是没反应:(,不知道问题出在那里
未申明常量/变量都是作为0处理
正招!!原来VC中WM_USER有值,而VB中没有申明,认为为0