MFC串口编程中发送数据函数的疑问

MFC串口编程中发送数据函数的疑问,第1张

关于“构造函数没有返回值”,

请茄盯注意: m_mscomm.put_Output调用的参数不是COleVariant的返回值, 而是一个颤颂和COleVariant类的实例。

这样,m_mscomm.put_Output函数中,可樱信以调用COleVariant中的函数或公用变量。

而构造函数则将变量存入至COleVariant类中, 供m_mscomm.put_Output函数调用。

就是要现成的了!比如:

C/C++ code?

// 1.打开串行通信口,保雀宏存串口句柄

hCom=CreateFile(m_sPortParam.port,

GENERIC_READ | GENERIC_WRITE,

0,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,// 使用重叠方式

NULL)

if(hCom==(HANDLE)INVALID_FILE_SIZE)

{

PostMessage(m_pMain->GetSafeHwnd(),WM_COMBACK_MESSAGE,0,SETCOMM_ERROR) // 报告端口打开失败

return

}

if(hCom != INVALID_HANDLE_VALUE)

{

// 设置端口

SetupComm(hCom,OUT_BUFF_SIZE,IN_BUFF_SIZE)

DCB myDCB

GetCommState(hCom, &myDCB)

myDCB.BaudRate=m_sPortParam.baud // 波特率

myDCB.fBinary=TRUE // 通信方式=二进制

myDCB.fParity=m_sPortParam.fparity // 奇偶校验 TRUE=使用,FALSE=不使用

myDCB.Parity=m_sPortParam.parity // 校验方式:0-无 1-奇 2-偶 3-标志 4-空瞎闭格

myDCB.ByteSize=m_sPortParam.bytesize // 数据位数

myDCB.StopBits=m_sPortParam.stopbits // 停止位数:0-1位 1-1.5位 2-2位

SetCommState(hCom, &myDCB)

}

else

{

// 设置失败

PostMessage(m_pMain->GetSafeHwnd(),WM_COMBACK_MESSAGE,0,SETCOMM_ERROR) // 报告端口打开失败

return

}

C/C++ code?

// 2.发送数据

Wol.hEvent=CreateEvent(NULL,// 创建事件句柄

TRUE,

FALSE,

NULL)

WriteFile(hCom,// 发送数据

&datas,

Len,

NULL,

&Wol)

C/C++ code?

// 读缓冲区并处理收到的数据

if(ReadFile(hCom,

&myByte,

Len,

NULL,

&Rol))

{

// CRC数据校验

crc=myByte[0]

if(m_sPortParam.fparity)

{

for(int k=1k<Lenk++)

crc=crc ^ myByte[k] // CRC运算

if(crc)

{

// crc检查错丢弃磨岁裂

}

Len--

}

// crc检查正确,发送数据给命令解释类

PostData(myByte,Len)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8258735.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存