现象:
使用串口通信,将串口接收的数据保存到excel表中,在串口程序CXXDlg::OnCommunication(WPARAM ch, LPARAM p)中运行到:
range.SetItem(COleVariant((long)iCurRow),COleVariant((long)1),COleVariant(csCur1)); 操作excel的地方就出错:“因为应用程序正在发送一个输入同步呼叫,所以无法执行呼出的呼叫。
解决方法:
在串口程序CXXDlg::OnCommunication(WPARAM ch, LPARAM p)中,增加判断:
if (InSendMessage())//是否是其它线程传入的消息
{
//保存数据
::PostMessage(m_hWnd, MSG_SAVE, (WPARAM)pBuf, (LPARAM)NULL);//MSG_SAVE:消息定义
}
else
{
//数据写入excel
}
在消息MSG_SAVE的处理函数中,对excel进行操作:
LRESULT CXXDlg::OnSave(WPARAM wp, LPARAM lp)
{
//数据写入excel
}