进程间通信SYSTEM_INFO结构

时间:2016-12-05 01:28:07

标签: c++ winapi

我尝试使用SendMessage()

将system_info结构发送到第二个进程
                HWND hDlg1 = FindWindow(NULL, L"5_2");
                SYSTEM_INFO si;
                GetSystemInfo(&si);
                cs.dwData = STRUCT;
                cs.cbData = sizeof(SYSTEM_INFO);
                cs.lpData = &si;
                if (hDlg1 != NULL)
                {
                    SendMessage(hDlg1, WM_COPYDATA, (WPARAM)hDlg, (LPARAM)(LPVOID)&cs);
                }

接收代码:

                pcds = (PCOPYDATASTRUCT)lParam;         
                SYSTEM_INFO* si;
                si = (SYSTEM_INFO *)pcds->lpData;

获取随机值

当我尝试接收这样的数据时:

SYSTEM_INFO si;
si = (SYSTEM_INFO)pcds->lpData;

有类型' _SYSTEM_INFO'没有超载的会员'运营商 - >'错误

1 个答案:

答案 0 :(得分:-2)

来自WM_COPYDATA上的doc

  

发送此消息时,引用的数据不能是   由发送过程的另一个线程改变。

似乎$query = "SELECT item{$product_id} - :quantity FROM running_inventory WHERE date BETWEEN :pickup AND :return"; 是发送过程中的本地变量,这就是你得到垃圾的原因。作为解决方案,您可以使用si的全局变量。

UPD:

接收部分必须仅访问消息处理程序中的数据(因为消息处理程序返回,数据无效)。

  

lParam参数仅在处理过程中有效   message ...如果接收应用程序必须在之后访问数据   SendMessage返回,它必须将数据复制到本地缓冲区。