我使用ReadFile
Windows API方法從循環中的並行端口讀取單個字節,從而繼承了代碼。緩衝區爲CString時的ReadFile奇怪行爲
代碼通過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
的內部代碼中的某種緩衝區溢出?如果不是,可能會解釋這種奇怪的行爲?
我不好,錯字。它不在原始代碼中,現在在一些備份中檢查確定。對不起,誤導,現在編輯。 –
'ReleaseBuffer'可能是事情,它從來沒有在原始代碼中調用 - 你認爲它可能會導致像我在我的問題中描述的行爲? –
@ShadowWizard:我知道當我忘記了ReleaseBuffer的調用時,我曾經有過錯誤,但我不記得發生了什麼。 –