我已经使用ReadFile
Windows API 方法继承了代码,以便在循环中从并行端口读取单个字节。
代码将CString
实例作为缓冲区参数传递,并将 1 作为要读取的字节数,如下所示:
CString inBuffer = "";
bResult = ReadFile(hCom, inBuffer.GetBuffer(1), 1, &nBytesRead, NULL);
allData += inBuffer.GetBuffer(1);
这段代码工作了很长时间,但有时会引起奇怪的问题,例如从机器发送的输入“AV01000”被读取为“AkVk0k1k0k0k0”——在每个字符读取后以某种方式添加了一些随机字符。
我花了很长时间才弄清楚这种行为的根源,并将代码更改为:
char buffer = '\0';
bResult = ReadFile(hCom, &buffer, 1, &nBytesRead, NULL);
allData += buffer;
它完美地工作,读取机器发送的确切数据。
这是内部代码中的某种缓冲区溢出CString
吗?如果不是,什么可以解释这种奇怪的行为?