Excelからシリアル通信を実現してみようという連載の6回目です。前回の記事はこちらになります。
前回はLoopBackTestTool(以下、本ツール)のソースコードを解説しました。
今回は使用しいるダイナミック リンク ライブラリ (DLL) の参照、その他の宣言について解説しようと思います。
使用するダイナミック リンク ライブラリ (DLL)
本ツールでは、ダイナミック リンク ライブラリ (DLL) を使用してシリアル通信を実現しています。以下に使用してイメDLLをご紹介します。
ファイルのオープンとクローズ
本ツールでは、シリアル通信で通信する先をファイルとして扱います。通信する前にファイルをオープン、通信が終わった後にはファイルをクローズします。
ファイルのオープンには「CreateFileA」を使います。オープンするとハンドルと呼ばれる値を返します。
ファイルのクローズには「CloseHandle」を使います。「CreateFileA」で受け取ったハンドルを指定してクローズします。
'ファイルのオープン Public Declare PtrSafe Function _ CreateFile Lib "kernel32" Alias "CreateFileA" ( _ ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ ByVal lpSecurityAttributes As Long, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) _ As Long 'ファイルのクローズ Public Declare PtrSafe Function _ CloseHandle Lib "kernel32" ( _ ByVal hObject As Long) _ As Long
バッファーの操作
実際の通信にあたっては、送信するデータ、受信するデータはバッファーと呼ばれる領域に一時的に格納されます。送信用のバッファーに格納されたデータは逐次送信処理が実行されます。受信データは受信用のバッファーに格納され、コチラが読込み指示をした際にバッファーからデータを取り出します。
通信を開始する前にバッファーの内容をクリアする必要があります。バッファーのクリアは「PurgeComm」を使用します。
バッファーの状態を確認するために「ClearCommError」を使用しています。本ツールでは受信データの有無に使用しています。
バッファーのサイズ指定には「SetupComm」を使用しています。
'バッファのクリア Public Declare PtrSafe Function _ PurgeComm Lib "kernel32" ( _ ByVal hFile As Long, _ ByVal dwFlags As Long) _ As Long 'バッファの状態を取得 Public Declare PtrSafe Function _ ClearCommError Lib "kernel32" ( _ ByVal hFile As Long, _ ByRef lpErrors As Long, _ ByRef lpStat As COMSTAT) _ As Long 'バッファサイズの指定 Public Declare PtrSafe Function _ SetupComm Lib "kernel32" ( _ ByVal hFile As Long, _ ByVal dwInQueue As Long, _ ByVal dwOutQueue As Long) _ As Long
次回もひきつづきソースコード解説
いかがでしょうか。詳細を書いているといくら紙面があっても書ききれませんので、詳細はご紹介したURLを参考にしてください。余談ですがMicrosoftの公式サイトって、少しだけわかりやすくなってませんか?次回もソースコード解説(これが最後)です。お楽しみに!!