2012-02-24 23 views
1

我打電話WriteFile將數據發送到一個調制解調器:無需編寫任何數據,WriteFile如何成功?

BOOL writeResult = WriteFile(m_hPort, p_message, length, &numOut, NULL); 

其中:

  • m_hPort是一個有效的HANDLE
  • p_message是含有ate0\r
  • 長度爲int一個unsigned char*值爲5
  • numOut i S上unsigned long初始化爲0

有時候我看到這個方法成功,但numOut!=長度

這怎麼可能對WriteFile的不發送任何數據恢復的成功?

編輯這是我如何創建句柄:

HANDLE hPort = CreateFileA("\\\\.\\COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 

我檢查了回報,這不是INVALID_HANDLE_VALUE這表明它是有效的。

+0

所以'numOut'是'0'還是別的什麼? – 2012-02-24 10:01:53

+0

That's correct .. – 2012-02-24 10:05:21

+0

'm_hPort'背後是什麼? – 2012-02-24 10:11:57

回答

1

畢竟是硬件問題。

使轉換器上電循環會清除硬件緩衝區,導致我們懷疑這是該設備驅動程序的問題。從漢斯的建議中,我們放棄了超時,然後開始更詳細地探測錯誤報告。

將超時減少到合理的含義意味着我們能夠確定緩衝區已經填滿,直到他們能夠更多地使用「更多!這就是爲什麼對轉換器進行電源循環固定的原因(我們嘗試通過工程重新佈線電源並反轉極性,但是異常情況下,都沒有解決問題)。

根本原因是一些片狀的硬件流量控制導致軟件無限期阻塞。禁用流量控制解決了這個問題。