標準の COM ポートを使用していくつかのカスタム ハードウェアと通信する Windows ユーティリティ プログラムに取り組んでいます。通信プロトコル (制御不能) では、生の 8 ビット データ バイトを送受信する必要があります。
現在、次の Windows API 関数を使用して COM ポートにデータを送信しています。
WriteFile(hFile, lpBuffer, numberOfBytesToWrite, ...)
ここhFile
で、 は適切に開かれた COM ポートへの参照でありlpBuffer
、メモリに保存したバイトの配列です。null 文字 (ASCII ゼロ) をデバイスに送信する必要があるまで、コードは完全に機能します。WriteFile
ヌル文字を検出するとすぐに送信を停止します。これは、文字列の末尾に到達したと見なされるためです。numberOfBytesToWrite
これは、適切に設定しても発生します。
Windows API を使用して生データを COM ポートに送信するにはどうすればよいですか? のような標準の API 呼び出しを使用したいとWriteFile
思いますが、提案は受け付けています。
私は現在RapidQを使用してユーティリティを構築していますが、Windows API 関数を直接呼び出すだけです。
編集:私のセットアップは、シリアルポートを介してカスタムハードウェアモジュールに接続されたWindows PCで構成されています。モジュールには、送信された文字を表示できる小さな画面があります。このセットアップを別のサードパーティ ユーティリティ プログラムでテストしました。このサードパーティ プログラムを使用してモジュールと通信でき、ヌル文字が正しく表示されます。私自身のプログラムで を使用するWriteFile
と、送信ストリームのどこかにヌル文字があると、残りのストリームが送信されなくなります。