ここで質問する内容ではないのかもしれませんが、
わけあってエックス様が作成された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;
実際に実行すると、正常に動いているように見えます。
受信イベントを変更するだけなので、これだけでよいのだと
思うのですが、本当にこれだけでよいのか心配です。
何か足りない部分があるようでしたらご教授願いたいのですが・・
宜しくお願いします。
ツイート | ![]() |