2012-02-15 64 views
0

我目前想實現使用Windows串行端口讀取器類(已實施一個使用Boost,要迎合該平臺可能沒有加速的可能性)。C++打開一個共享串行端口的CreateFile

一切似乎運作良好,除了當我用我的升壓串口刻錄機(一個獨立的可執行文件)測試我的Windows串行端口讀卡器(可執行文件),筆者拋出一個拒絕訪問異常。否則讀者就會工作,因爲它似乎在讀取串口上的任何內容,直到作者不能再寫。

不要緊作家是否啓動第一或閱讀器首次啓動時,一旦閱讀器打開端口閱讀,作家不能再寫入該端口。

我試圖在的CreateFile()方法,但無濟於事到目前爲止設置不同的參數,我希望下面的代碼片段工作,但事實並非如此。

m_serial = CreateFile(
    m_port, 
    GENERIC_READ, 
    FILE_SHARE_WRITE, 
    0, 
    OPEN_EXISTING, 
    FILE_ATTRIBUTE_NORMAL, 
    0); 

作家代碼可能是無關緊要的,但在這裏它是無論如何:

void writeLine(std::string line) 
{ 
    boost::asio::io_service io; 
    boost::asio::serial_port serial(io, m_port); 

    serial.set_option(boost::asio::serial_port_base::baud_rate(m_rate)); 

    boost::asio::write(serial, boost::asio::buffer(line.c_str(), line.size())); 

} 

而對於提振。什麼()::系統:: SYSTEM_ERROR是:

open: Access is denied 

有任何想法嗎?

我在這裏看過:http://www.robbayer.com/files/serial-win.pdf(偉大的文章,但不那麼遠)和http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx - 似乎應該是dwShareMode參數,但我無法得到它的工作。

編輯:我應該提到我使用這個串口模擬器http://www.eterlogic.com/Products.VSPE.html這可能是我的災難的原因,如果是這樣,那麼它並不重要。當我的Boost閱讀器和我的Boost閱讀器一起使用時,仿真器按照預期工作(來自兩個獨立的可執行文件)。

回答

0

我可以理解爲什麼沒有出現過的答覆了。爲了記錄,打開串口的參數很好。問題在於我試圖在不關閉的情況下爲每個閱讀打開相同的端口,所以我只是將它打開,直到完成完成。