CommXについて


カーネル・ダンサーズ  2004-11-22 10:04:36  No: 11857

ここで質問する内容ではないのかもしれませんが、
わけあってエックス様が作成されたCommXの受信イベントを改造しました。
(技術があまりないのに、改造とはいかがなものかと思いますが)
でも、対応していただけたら幸いです。

内容は、

TCommReceiveEvent = procedure(Sender: TObject; ReceiveSize: Integer) of Object;
property OnReceive : TCommReceiveEvent;

上記をコメントにし、代わりに

TCustomCommX = class(TComponent)
public
  CommRcvEvent : THandle;

と、代わりになる受信イベントを追加しました。

そして、PortOpenで

CommRcvEvent := CreateEvent(nil, false, false, nil);
というように生成し、

PortCloseで

  if FHandle <> INVALID_HANDLE_VALUE then begin
    CloseHandle(CommRcvEvent);

と、クローズしています。

受信イベント関数を
procedure TCustomCommX.ReceiveEvent;
var
  len : Integer;        // データ数
begin
  if FHandle <> INVALID_HANDLE_VALUE then begin
    if Assigned(FOnReceive) then begin
      len := GetReceiveLength;
      if len <> 0 then begin
        FOnReceive(Self, len);
      end;
    end;
  end;
end;

上記から以下のように修正しました。

procedure TCustomCommX.ReceiveEvent;
var
  len : Integer;        // データ数
begin
  if FHandle <> INVALID_HANDLE_VALUE then begin
    len := GetReceiveLength;
    if len <> 0 then begin
      SetEvent(CommRcvEvent);
    end;
  end;
end;

実際に実行すると、正常に動いているように見えます。
受信イベントを変更するだけなので、これだけでよいのだと
思うのですが、本当にこれだけでよいのか心配です。

何か足りない部分があるようでしたらご教授願いたいのですが・・
宜しくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加