delphi の CreateFile を使ってシリアルポートを開く

シリアルポートを開くには、DelphiのCreateFile関数を使うことができます。

最初に、CreateFile 関数を使用してシリアル ポートに見合ったファイル ハンドルを作成する必要があります。この関数のプロトタイプは以下の通りです。

function CreateFile(lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD;
  lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
  hTemplateFile: THandle): THandle; stdcall;

この中で、lpFileNameパラメータはシリアルポートの名前を指定するために使用され、例えば「COM1」は最初のシリアルポートを表し、「COM2」は2番目のシリアルポートを表し、このように順番に続いていきます。

dwDesiredAccessパラメータはシリアルポートに対するアクセス権限を指定するために使用されます。通常、GENERIC_READ | GENERIC_WRITEを設定して、読み込みと書き込みを許可します。

dwShareModeパラメーターは共有モードを指定するために使用され、通常、共有しないことを表す0に設定できます。

その他の引数は0かnilに設定可能とする。

続いて、CreateFile関数が返したハンドルが有効かどうかを確認し、有効であればシリアルポートのオープンが成功しており、その後のシリアルポート関連の操作が可能となり、無効であればシリアルポートのオープンが失敗しています。

シリアル通信を開始するためのサンプルコードの例として以下を紹介します。

var
  hComm: THandle;
begin
  hComm := CreateFile('COM1', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
  if hComm <> INVALID_HANDLE_VALUE then
  begin
    // 串口打开成功,可以进行后续操作
    ShowMessage('串口打开成功');
    // ...
    CloseHandle(hComm); // 关闭串口
  end
  else
  begin
    // 串口打开失败
    ShowMessage('串口打开失败');
  end;
end;

このコード例ではCOM1シリアルポートを開いている点に注意。他のシリアルポートを開く場合は、lpFileNameパラメータの値を適切に変更してください。また、Windowsユニットを含める必要があり、MessageBox関数はシリアルポートのオープン結果を表示するために使用されています。これは他の方法で代用できます。

bannerAds