안녕하십니까 어린프로그램머 찌께다시입니다.
아래의 내용이 좀 부실한 것같아서 보충해서 올립니다.
제 프로그램은 데이타맨 프로처럼 텔넷, 모뎀모드가 별도 있지 않고
모든 아이탬의 연결정보를 포함하고 있는 클래스가 있고 이 아이탬들을 클래스가 리스트로
관리를 하는 형태로 연결 텔넷이냐 모뎀연결이냐 하는 연결 정보는 아이탬 각각이
가지고 있기때문에 프로그램이 시작할때 모뎀을 초기화 하질 않습니다.
그리고 어떤 아이탬이 선택이 되었을 경우에 내부적으로 접속 모드를 가지고 있는
LinkItem변수를 조사해서 텔넷이냐 모뎀이냐를 구분한다음 다른 루프로 분기시켜
그에 맞는 행동을 하겠끔 되어 있습니다.
프로그램이 시작되고 연결버튼을 누르게 되면 전화접속 연결창이 뜨면서 LinkType에 따라
처리 루틴이 분기 하게 되는 것이지요...
그 부분이 전에 올렸던 소스 입니다.
{ ApplyDoc ------------------------------------------------------------------- }
procedure TTPowerEMU.ApplyDoc;
var
Sess: Integer;
PhoneNumber: String;
begin
MainTerm.Active := False;
MainTerm.Font := ConnItem.DeskTop.FontName;
MainTerm.DisplayRows := ConnItem.DeskTop.DisplayRows;
MainTerm.DisplayColumns := ConnItem.DeskTop.DisplayCols;
MainTerm.Color := ConnItem.DeskTop.BackColor;
Emulator1.EmulatorType := ConnItem.Emulator;
MainTerm.Active := True;
MainTerm.Scrollback := ConnItem.DeskTop.ShowScroll;
SizeToFont;
Sess := ConnItem.Session;
Caption := ConnItem.HostName + SessName[Sess];
Tag := Sess;
LinkType := ConnItem.LinkType;
ComPort1.Open := False;
TelnetPort1.Open := False;
NullPort1.Open := False;
if ConnItem.LinkType = ltTelnet then begin {현재 접속 아이탬이 텔넷일때}
MainTerm.ComPort := TelnetPort1;
TelnetPort1.DeviceLayer := dlWinsock;
TelnetPort1.wsAddress := ConnItem.IpName;
TelnetPort1.ComNumber := 0;
TelnetPort1.Open := True;
DefHost := ConnItem.HostName;
end
else if ConnItem.LinkType = ltModem then begin {현재 접속 아이탬이 모뎀일때}
if ComPort1.Open = True then
begin
MainTerm.BPlusTriggers := False;
MainTerm.Active := False;
Modem.Started := False;
ComPort1.Open := False;
if (AutoTrig <> 0) then
ComPort1.RemoveTrigger(AutoTrig);
end;
MainTerm.ComPort := ComPort1;
ComPort1.ComNumber := ConnItem.Modem.ComNum;
ComPort1.Baud := ConnItem.Modem.Baud;
{IFNDEF Win32}
ComPort1.DeviceLayer := dlComm; {16bit Setting}
{ELSE
ComPort1.DeviceLayer := dlWin32;} {32bit Settiong}
{ENDIF}
ComPort1.Open := True;
ComPort1.TapiMode := tmOff; {32bit부터 지원을 하기때문이다. 고려}
{pConnSet.Caption := 'COM' + IntToStr(ComPort1.ComNumber) + ' ' + ConnItem.Modem.Baud;}
ZmodemAutoSt := True;
EnableZmodemAutoStart; {사용자가 원한 다면 자동적으로 Z모뎀을 가동한다.}
PhoneNumber := ConnItem.IpName;
{Modem.Initialize;}
{initialize the modem}
if (ComPort1.TapiMode = tmOff) then
if ComPort1.DCD then
begin
if (MessageDlg('Carrier detected. Send modem initialization?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
begin
Initializing := True;
Modem.Initialize;
Modem.Started := True;
end;
end
else
begin
Initializing := True;
Modem.Initialize;
end;
ConnectPhone(PhoneNumber); {에러 발생지점}
DefHost := ConnItem.HostName;
end
else if ConnItem.LinkType = ltRS232 then begin
MainTerm.ComPort := NullPort1;
NullPort1.ComNumber := ConnItem.Modem.ComNum;
NullPort1.Baud := ConnItem.Modem.Baud;
{$IFNDEF Win32}
NullPort1.DeviceLayer := dlComm;
{$ELSE}
NullPort1.DeviceLayer := dlWin32;
{$ENDIF}
NullPort1.Open := True;
{pConnSet.Caption := 'COM' + IntToStr(ComPort1.ComNumber) + ' ' + ConnItem.Modem.Baud;}
DefHost := ConnItem.HostName;
end;
bConnect := True;
end;
그런데 문제는 이상한것이 이게 실행 모드로 그냥 실행을 하게 되면 일단은 전화접속상태창이 열리고
(DialerDialog.Execute를 실행함)나서 (버튼이 눌려지는 소리도 안들림) ModemBusy에러가 나지만
디버깅 모드로 실행을 하게 되면 전화접속상태창이 열리고(DialerDialog.Execute을 실행)나서 천리안
으로 전화를 걸었으면 천리안에 전화가 걸리고 나서 메뉴가 떳을때 비로서 에러가 난다는 것입니다.
뭐 가 문제 일까요.... 모뎀 초기화 부분이 잘못이 되었는 것인가..
또 전화를 끊을 때도 badhandle에러가 납니다. 이런 에러들을 접해보신분 연락을 바랍니다.
이 찌께다시가 급합니다. 급해용 !!!!!!
어린 프로그래머 ----찌께다시-------
|