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関数はシリアルポートのオープン結果を表示するために使用されています。これは他の方法で代用できます。