달인시스템의 안정석입니다. TApdTapiDevice 컴포넌트를 사용하여
통신프로그램을 작성하고 있는 중인데, 모뎀풀 서버에 접속한뒤에
이상없이 통신을 한후에 ApdTapiDevice1.CancelCall을 사용하여
종료를 하거든요! 그런데, 주기적이지 않게 ApdTapiDevice1.Dial
로 정상적으로 전화를 건후 OnTApiPortOpen Event가 발생하기 바로
전에 'EAccess Violation'이 발생하고 OnTApiPortOpen시에 Terminal
에 ApdTerminal1.StuffString('Port Open'+#13#10);
의 내용이 찍히는데요. 이유를 모르겠어요. 가르쳐 주세요!!
아래에 이 에러가 발생하는 프로그램 Source를 올립니다.
(저는 지금 Nt server 4.0에서 작업하고 있습니다.)
procedure TForm1.ApdTapiDevice1TapiPortClose(CP: TObject);
//포트가 닫혔을때 실행하는 부분입니다.
begin
Status.Panels[0].Text := 'Waiting';
OnProcessFlag := False;
ProcessSwitch := dtIdle;
Statuscall := 'DisConnect';
if ListMessage.Items.Count > 0 then
begin
if (OnProcessFlag = False) and (Statuscall = 'DisConnect') then
begin
OnProcessFlag := True;
ApdTapiDevice1.Dial('모뎀풀 전화번호');
Status.Panels[0].Text := 'Dialing';
ProcessSwitch := dtDial;
end;
end;
end;
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
c : char;
i : word;
received : string;
begin
received := '';
for i := 1 to Count do begin
c := Apdcomport1.GetChar ;
received := received + c;
end;
if Trim(Received) = 'login:' then begin
ApdComPort1.OutPut := '+++';
end;
if Trim(Received) = 'OK' then begin
ProcessSwitch := dtDisConnectInternal;
end;
end;
==> 이 부분은 Case문 중에서 Flag를 이용하여 전화를 끊는부분입니다.
dtDisConnectInternal:
begin
ApdTapiDevice1.CancelCall;
end;
|