我目前想實現使用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閱讀器一起使用時,仿真器按照預期工作(來自兩個獨立的可執行文件)。