2017-06-13 11 views
0

.NET FrameworkのSerialPortクラス(System.IO.Ports)を使用していて、データの受信を待機しようとしています。私は周りを見回し、WaitCommEvent関数は人々が使用することを示唆しているようですが、最初のパラメータとしてHANDLEを期待しています。私は、SerialPortからハンドルを取得する方法か、SerialPortクラスと互換性のあるデータを待つ別の方法を知りたいと思います。COMポートでデータを待つ方法

+1

のCreateFileはあなたにハンドルを与える必要があります。 –

+1

ようこそStackOverflowへ。 ['SerialPort'のドキュメント(https://msdn.microsoft.com/en-us/library/system.io.port.serialport.aspx)を読むと、[DataReceived](https ://msdn.microsoft.com/en-us/library/system.io.port.serialport.datareceived.aspx)event: "* SerialPortオブジェクトによって表されるポートを通じてデータが受信されたことを示します。*" –

+0

@レミーそれはC++ではなく、C++/CLIです。 –

答えて

0

SerialPort classDataReceivedイベントを有する:

データがSERIALPORTオブジェクトによって表されるポートを介して受信されたことを示します。

マニュアルは、次のC++/CLIの例を提供します。パラメータとして通信ポートの名前で

#using <System.dll> 

using namespace System; 
using namespace System::IO::Ports; 

ref class PortDataReceived 
{ 
public: 
    static void Main() 
    { 
     SerialPort^ mySerialPort = gcnew SerialPort("COM1"); 

     mySerialPort->BaudRate = 9600; 
     mySerialPort->Parity = Parity::None; 
     mySerialPort->StopBits = StopBits::One; 
     mySerialPort->DataBits = 8; 
     mySerialPort->Handshake = Handshake::None; 
     mySerialPort->RtsEnable = true; 

     mySerialPort->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler); 

     mySerialPort->Open(); 

     Console::WriteLine("Press any key to continue..."); 
     Console::WriteLine(); 
     Console::ReadKey(); 
     mySerialPort->Close(); 
    } 

private: 
    static void DataReceivedHandler(
         Object^ sender, 
         SerialDataReceivedEventArgs^ e) 
    { 
     SerialPort^ sp = (SerialPort^)sender; 
     String^ indata = sp->ReadExisting(); 
     Console::WriteLine("Data Received:"); 
     Console::Write(indata); 
    } 
}; 

int main() 
{ 
    PortDataReceived::Main(); 
} 
関連する問題