WM_COPYDATA 进程间通信 传结构体失败...

linlinlinxi007 2010-08-05 11:09:45
a.exe代码:

typedef struct backupinfo
{
String sign;
String backuppath;
}BackupInfo;

void __fastcall TForm1::btn1Click(TObject *Sender)
{
HWND hWnd = FindWindow("TForm1","Form2");
if(hWnd)
{

BackupInfo *backup = new BackupInfo() ;
backup->sign = "access";
backup->backuppath = "ddd";

COPYDATASTRUCT cds;
cds.dwData = 0 ;
cds.cbData = sizeof(BackupInfo);
cds.lpData = (PVOID)backup;
SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cds);

}
}

b.exe代码:

typedef struct backupinfo
{
String sign;
String backuppath;
}BackupInfo;

void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
switch (Message.Msg)
{
case WM_COPYDATA:
{

COPYDATASTRUCT *cds;
cds = (COPYDATASTRUCT*)Message.LParam;
BackupInfo * backup = (BackupInfo*)(cds->lpData);
String sign = backup->sign;

....
break;
}
}
TForm::WndProc(Message);
}

不知道为什么b.exe程序backup结构体接收的数据总是为空...
我a.exe明明给结构体赋值了的


请哪位大哥帮帮忙,我想了一上午都不知道怎么回事,怎么改正???
...全文
161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
truelove7283159 2010-08-07
  • 打赏
  • 举报
回复
char数组,而且是\0\0结束的.
我通常开数组+4,然后memset,,0x00,然后在初始化内容,在发,就OK了.
ccrun.com 2010-08-05
  • 打赏
  • 举报
回复
好像毛毛回答过你这个问题啊,WM_COPYDATA传输的数据,不要用String类型,改成char数组。
wu__123 2010-08-05
  • 打赏
  • 举报
回复
这样试试:
BackupInfo backup;
.....
cds.lpData = (PVOID)&backup

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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