안녕하세요 어린 프로그래머 찌께다시입니다.
현재 지금 저는 AsyncPro를 이용해서 텔넷과 모뎀 통신을 지원하는
16bit 에뮬레이터를 만들고 있는 중입니다.
그런데 연결을 수행 하고 나서 ModemBusy에러가 자꾸나는데 어디서 잘못된 것인지
잘 판단이 안서네요...
혹시 AsyncPro를 이용해서 에뮬레이터를 만들어 보신분은
꼭 연락이나 답변좀 부탁합니다.... 급하거든요....
저의 일부 소스코드를 올립니다.
여러 델파이 도사님들의 관심 부탁드립니다.
{ 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;
procedure TTPowerEMU.ConnectPhone(PhoneNumber: String);
begin
if ComPort1.TapiMode = tmOff then begin
DialerDialog.PhoneNumber := PhoneNumber;
DialerDialog.Execute;
end
else begin
end;
end;
{연결 버튼을 누를때}
procedure TTPowerEMU.btnDialUpClick(Sender: TObject);
begin
if DefHost = '' then begin
with TfrmConnList.Create(Self) do begin
ShowModal;
DefHost := SelectHost;
Free;
MakeConnect(DefHost);
end;
end
else begin
MakeConnect(DefHost);
end;
end;
procedure TTPowerEMU.MakeConnect(HostName: String);
var
{bModem : TLinkType;}
ExeName: array[0..255] of Char;
Index: Integer;
begin
if bConnect then begin
StrPCopy(ExeName,Application.ExeName + ' ' + HostName);
WinExec(ExeName, SW_SHOW);
end
else
begin {여기서 ConnItem은 각종 연결설정정보를 저장하는
{if DefHost = '' then {클래스입니다.}
begin
Index := FindLinkIndex(HostName); {현재 HostName와 같은 이름을 가지고 있는 아이탬의}]
{인덱스를 찾아 현재 ConnItem클래스에 Assign한다.}
ConnItem.Assign(Doc.ConnLinkItems.Items[Index]);
ApplyDoc;
{end;}
end;
end;
|