掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CommXについて (ID:11857)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ここで質問する内容ではないのかもしれませんが、 わけあってエックス様が作成された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; 実際に実行すると、正常に動いているように見えます。 受信イベントを変更するだけなので、これだけでよいのだと 思うのですが、本当にこれだけでよいのか心配です。 何か足りない部分があるようでしたらご教授願いたいのですが・・ 宜しくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.