Q&A

  • dll을 몇차례 연속으로 호출하면 시스템이 다운되는데요.
델파이5, 윈98에서 작업중입니다.
제가 협력업체에 배포할 dll을 델파이로 만들고 있습니다.
dll을 통해서 저희 서버소켙에 전문을 보내면 응답을 받을 수 있게 하려구요.
그런데 dll을 연속으로 몇차례 호출하면 시스템이 뻗어 버립니다. 테스트는
개발중인 pc에서 하고 있구요.
dll에 폼을 넣어서 여기에 ics 클라이언트 소켙과 타이머를 하나씩 추가했습니다. dll을 호출하면 모달폼을 띄우고요. 여기서 저희 서버소켙에 전문을 송신합니다. 그리고 소켙에서 응답을 받으면 폼을 닫구요. 타이머는 10초간격으로 동작하면서 응답이 없으면 폼을 종료합니다.

아래는 dll에 포함된  함수입니다. 모가 잘못됬는지 잘 모르겠습니다. 도움 부탁드립니다.

var
  RecvData_bPuv;
  SendMsg_bPuv;
  Recv_bPuv;
{.........................}

function RequestBoramCard(AHandle: integer; Addr, Port, SendMsg: Pchar; var RecvMsg: Pchar): Longint;
var
  DllFrm: TDLLForm;
begin
  Result:= -1;
  RecvData_bPuv:= '';
  SendMsg_bPuv := StrPas(SendMsg);
  Recv_bPuv:= False;
  Application.Handle:= AHandle;
  DllFrm:= TDLLForm.Create(Application);
  try
    DllFrm.Timer1.Enabled:= False;
    if DllFrm.CliSocket.State <> wsConnected then
    begin
        DllFrm.CliSocket.Proto := 'tcp';
        DllFrm.CliSocket.Port  := StrPas(Port);
        DllFrm.CliSocket.Addr  := StrPas(Addr);
        DllFrm.CliSocket.Connect;
        Application.ProcessMessages;
    end;

    DllFrm.ShowModal;
    if Recv_bPuv then Result:=0;
    RecvMsg:= Pchar(RecvData_bPuv);

  finally
      DllFrm.Free;
  end;
end;

procedure TDLLForm.CliSocketSessionConnected(Sender: TObject; Error: Word);
begin
   CliSocket.SendStr(SendMsg_bPuv);
   Timer1.Enabled:= True;
end;

procedure TDLLForm.CliSocketDataAvailable(Sender: TObject; Error: Word);
begin
   RecvData_bPuv:= '';
   RecvData_bPuv:= CliSocket.ReceiveStr;
   Recv_bPuv    := Length(RecvData_bPuv)>10;
   if Recv_bPuv then
   begin
      Timer1.Enabled:= False;
      CliSocket.Close;
      Close;
   end;
end;
0  COMMENTS