我尝试使用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'没有超载的会员'运营商 - >'错误
答案 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返回,它必须将数据复制到本地缓冲区。