请教VB中接收VC自定义消息的地址变量(指针)

valley 2006-11-14 07:09:47
我在VB程序中已能接收到VC程序中发送来的消息,但不知道如何解析得到数据?

在VC的“发送”程序中,发送的消息中的lParam为指向一个288字节的自定义结构的指针。

在VC的“接收”程序中示意代码如下
/* “接收”部分的消息处理程序 DEMO
▲▲请注意lParam的定义
LONG OnStkDataOK(UINT wParam,LONG lParam)
{
RCV_DATA* pHeader;
// ▲▲请注意lParam的定义
pHeader = (RCV_DATA *)lParam;
switch( wParam )
{
case RCV_REPORT: // 共享数据引用方式,股票行情
for(i=0; i<pHeader->m_nPacketNum; i++)
{
pHeader->m_pReport[i] ...
// 数据处理
}
break;

.....


'下面是我在VB中的程序
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = 2006 Then '2006号消息为自定义的通信消息号码(端口)
mMsgC = mMsgC + 1

'此处应该对接收到的的数据进行处理
Select Case wParam
Case RCV_REPORT '接收到的wParam是正确的

'▲▲请问在此处如何取得lParam中的数据??
'▲▲下面是我用的CopyMemory,但得到的tRecData中的数据不正确
pRec = VarPtr(tRecData)

CopyMemory pRec, lParam, tL
End Select
End If

Dim lpPrevWndProc As Long
'查询原来默认的窗口过程指针
lpPrevWndProc = GetWindowLong(hw, GWL_USERDATA)
'调用原来的窗口过程
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function
...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmen 2006-11-14
  • 打赏
  • 举报
回复
把你发送消息的代码贴上来
另外,tRecData的定义在什么地方?VarPtr(tRecData)是什么意思?可以详细说说么?
VB我不是很熟,不好意思
valley 2006-11-14
  • 打赏
  • 举报
回复
非常感谢 Hassle 的多次指点,终于其它帖子中解决了。

也感谢其他朋友的提醒。
正确的方法:
CopyMemory ByVal VarPtr(tRecData),byval lParam, tL
DentistryDoctor 2006-11-14
  • 打赏
  • 举报
回复
发送的消息中的lParam为指向一个288字节的自定义结构的指?

已经跨进程边界了,当然不行。

WM_COPYDATA是一种简单的方法,其它的IPC机制也可以。
rickerliang 2006-11-14
  • 打赏
  • 举报
回复
进程间数据传递用WM_COPYDATA
neosu 2006-11-14
  • 打赏
  • 举报
回复
不管是VB还是VC的程序, 简单的SendMessage是无法传递缓冲区的.

参考一下WM_COPYDATA消息, 需要把要发的数据组成一个结构体.

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧